校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 詳解mysql中的冗余和重復(fù)索引

詳解mysql中的冗余和重復(fù)索引

熱門標(biāo)簽:電銷機器人價格多少錢一臺 400電話申請什么好 怎么申請400電話申請 電話機器人免費嗎 怎么辦理400電話呢 好搜地圖標(biāo)注 地圖標(biāo)注圖標(biāo)素材入駐 龍圖酒吧地圖標(biāo)注 百度地圖標(biāo)注地方備注

mysql允許在相同列上創(chuàng)建多個索引,無論是有意還是無意,mysql需要單獨維護重復(fù)的索引,并且優(yōu)化器在優(yōu)化查詢的時候也需要逐個地進行考慮,這會影響性能。

  重復(fù)索引是指的在相同的列上按照相同的順序創(chuàng)建的相同類型的索引,應(yīng)該避免這樣創(chuàng)建重復(fù)索引,發(fā)現(xiàn)以后也應(yīng)該立即刪除。但,在相同的列上創(chuàng)建不同類型的索引來滿足不同的查詢需求是可以的。

CREATE TABLE test(
 ID INT NOT NULL PRIMARY KEY,
 A INT NOT NULL,
 B INT NOT NULL,
 UNIQUE(ID),
 INDEX(ID),
) ENGINE=InnoDB;

這段SQL創(chuàng)建了3個重復(fù)索引。通常并沒有理由這么做。

  冗余索引和重復(fù)索引有一些不同,如果創(chuàng)建了索引(a,b),再創(chuàng)建索引(a)就是冗余索引,因為這只是前面一個索引的前綴索引,因此(a,b)也可以當(dāng)作(a)來使用,但是(b,a)就不是冗余索引,索引(b)也不是,因為b不是索引(a,b)的最左前綴列,另外,其他不同類型的索引在相同列上創(chuàng)建(如哈希索引和全文索引)不會是B-Tree索引的冗余索引,而無論覆蓋的索引列是什么。

  冗余索引通常發(fā)生再為表添加新索引的時候。例如,有人可能會增加一個新的索引(A,B)而不是擴展以后的索引(A)。還有一種情況是將一個索引擴展為(A,ID),其中ID是主鍵,對于InnoDB來說主鍵已經(jīng)包含在二級索引中了,所以這也是冗余的。

  大多數(shù)情況下都不需要冗余索引,應(yīng)該盡量擴展已有的索引而不是創(chuàng)建新索引,但也有時候處于性能方面的考慮需要冗余索引,因為擴展已有的索引會導(dǎo)致其變得太大,從而影響其他使用該索引的查詢性能。如:如果在整數(shù)列上有一個索引,現(xiàn)在需要額外增加一個很長的varchar列來擴展該索引,那么性可能會急劇下降,特別是有查詢把這個索引當(dāng)作覆蓋索引,或者這是myisam表并且有很多范圍查詢的時候(由于myisam的前綴壓縮)

  比如,有一張userinfo表。這個表有1000000條數(shù)據(jù),對每個state_id值大概有20000條記錄。在state_id有一個索引,那么下面的SQL我們稱之為Q1

SELECT count(*) FROM userinfo WHERE state_id=5; --Q1

改查詢的執(zhí)行速度大概是每秒115次(QPS)

  還有一個SQL,我們稱之為Q2

SELECT state_id,city,address FROM userinfo WHERE state_id=5; --Q2

這個查詢的QPS是10,提升該索引性能最簡單的辦法就是狂戰(zhàn)索引為(state_id,city,address),讓索引能覆蓋查詢:

ALERT TABLE userinfo ADD KEY state_id_2(state_id,city,address);

注:state_id已經(jīng)有索引了,根據(jù)前面的概念,這是一個冗余索引而不是重復(fù)索引)

怎么找出冗余索引和重復(fù)索引呢?

1.可以使用Shlomi Noach的common_schema中的一些試圖來定位,common_schema是一系列可以安裝到服務(wù)器上的常用的存儲和試圖。

2.可以使用Percona Toolkit中的pt_duplicate-key-checker,該工具通過分析表結(jié)構(gòu)來找出冗余和重復(fù)的索引。

總結(jié)

以上就是本文關(guān)于詳解mysql中的冗余和重復(fù)索引的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以參閱:幾個比較重要的MySQL變量、簡述Redis和MySQL的區(qū)別、MYSQL子查詢和嵌套查詢優(yōu)化實例解析等,如有不足之處,歡迎留言指出,小編會及時回復(fù)大家并進行修改,感謝朋友們對本站的支持!

您可能感興趣的文章:
  • MySQL查詢?nèi)哂嗨饕臀词褂眠^的索引操作
  • mysql重復(fù)索引與冗余索引實例分析
  • MySQL中冗余和重復(fù)索引的區(qū)別說明

標(biāo)簽:廣西 撫順 固原 內(nèi)江 防疫工作 汕尾 浙江 溫州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解mysql中的冗余和重復(fù)索引》,本文關(guān)鍵詞  詳解,mysql,中的,冗余,和,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解mysql中的冗余和重復(fù)索引》相關(guān)的同類信息!
  • 本頁收集關(guān)于詳解mysql中的冗余和重復(fù)索引的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 佳木斯市| 峨眉山市| 宁陵县| 内黄县| 遵义市| 建湖县| 涡阳县| 泗洪县| 灵石县| 瑞昌市| 本溪市| 瑞昌市| 洛浦县| 武鸣县| 三江| 林州市| 普洱| 靖西县| 太仆寺旗| 长丰县| 兴化市| 承德市| 贵溪市| 南乐县| 延边| 青岛市| 克山县| 平陆县| SHOW| 平谷区| 苗栗县| 毕节市| 三穗县| 彝良县| 株洲市| 边坝县| 扬中市| 谷城县| 方正县| 杭州市| 烟台市|