課程
/數(shù)據(jù)庫(kù)
/MySQL
/性能優(yōu)化之MySQL優(yōu)化
這個(gè)聯(lián)合索引,放前面放后面代表什么?為什么離散程度高的放前面呢?知其然而不知其所以然,不太好
2016-07-31
源自:性能優(yōu)化之MySQL優(yōu)化 3-1
正在回答
簡(jiǎn)單解釋,組合索引index(a,b) 會(huì)創(chuàng)建基于a,ab創(chuàng)建兩個(gè)索引。你想一下創(chuàng)建索引的原則是什么?如果某列的離散度很低,一個(gè)表有100w行數(shù)據(jù),該列只有兩種不同的值,你會(huì)在該列上創(chuàng)建索引嗎? 所以就明白了,如果a的離散度很低,在a上創(chuàng)建索引和前面分析的原則是不是矛盾了。總結(jié),就是要降低掃描索引的消耗,為什么離散度高了可以降低,這是btree的結(jié)構(gòu)問(wèn)題
greenhandc 提問(wèn)者
應(yīng)該按老師說(shuō)的好一點(diǎn),自己試一下查詢的耗時(shí)就知道。
知乎上有個(gè)答案跟老師說(shuō)的完全相反,不知道到底該怎么理解。http://www.zhihu.com/question/31109426
作者:Lawrence.li鏈接:http://www.zhihu.com/question/31109426/answer/66326216來(lái)源:知乎著作權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)。
這里涉及兩個(gè)知識(shí)點(diǎn):最左前綴left-prefix,列基數(shù)cardinality最左前綴,可以理解為在復(fù)合索引中,越是左邊越好因?yàn)榉謩e對(duì)A,B,C三個(gè)列建聯(lián)合索引index,實(shí)際上是建立3個(gè)索引,每個(gè)索引都包含AA,B,CA,BA列基數(shù),是指它所容納的所有非重復(fù)值的個(gè)數(shù),可以理解為 ?distinct(某列)后的結(jié)果比如某個(gè)列包含值1,3,7,4,7,3,那么它的基數(shù)就是4了列基數(shù)越大,重復(fù)值越少,需要建索引,因?yàn)槿绻沉械闹刀际侵貜?fù)的就沒(méi)必要建索引了 是(`DistriType`,`DistriButTime`) 這樣建?還是這樣建 (`DistriButTime`,`DistriType`) ?count一下就知道了count(distinct DistriType) ?與 count(distinct DistriButTime)比較猜測(cè)肯定是前者<后者,所以聯(lián)合索引把DistriTyp放左邊更優(yōu)再舉一個(gè)例子,一本字典,記錄了所有的姓名分別用兩個(gè)字段,第一列:姓 ? ?第二列:名很明顯 count(distinct 姓) 要比 count(distinct 名) 要少因?yàn)榘偌倚眨帐现挥幸话賯€(gè),而名字可以自由組合很多個(gè)劉 ? ?燁劉 ? ?德華劉 ? ?爾達(dá)張 ? ?震張 ? ?學(xué)友所以如果要建立聯(lián)合索引,肯定是 ? key index ( 姓,名),先排姓氏,再排名字
likeflower950
舉報(bào)
了解MySQL數(shù)據(jù)庫(kù)優(yōu)化的方法和技巧,在課程中共同探討一起學(xué)習(xí)吧
2 回答離散程度的大小的判定方法
3 回答按照課程例子 為什么使用子查詢返回的結(jié)果也是重復(fù)的呢
1 回答join查詢方式為什么比子查詢的方式速度更快?
1 回答為啥子查詢的效率沒(méi)有鏈接查詢的效率高?
1 回答order by title 此處title有索引,為什么還是filesort呢?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購(gòu)課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2017-02-15
簡(jiǎn)單解釋,組合索引index(a,b) 會(huì)創(chuàng)建基于a,ab創(chuàng)建兩個(gè)索引。你想一下創(chuàng)建索引的原則是什么?如果某列的離散度很低,一個(gè)表有100w行數(shù)據(jù),該列只有兩種不同的值,你會(huì)在該列上創(chuàng)建索引嗎? 所以就明白了,如果a的離散度很低,在a上創(chuàng)建索引和前面分析的原則是不是矛盾了。總結(jié),就是要降低掃描索引的消耗,為什么離散度高了可以降低,這是btree的結(jié)構(gòu)問(wèn)題
2017-01-12
應(yīng)該按老師說(shuō)的好一點(diǎn),自己試一下查詢的耗時(shí)就知道。
2016-07-31
知乎上有個(gè)答案跟老師說(shuō)的完全相反,不知道到底該怎么理解。http://www.zhihu.com/question/31109426
作者:Lawrence.li
鏈接:http://www.zhihu.com/question/31109426/answer/66326216
來(lái)源:知乎
著作權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)。
這里涉及兩個(gè)知識(shí)點(diǎn):最左前綴left-prefix,列基數(shù)cardinality
最左前綴,可以理解為在復(fù)合索引中,越是左邊越好
因?yàn)榉謩e對(duì)A,B,C三個(gè)列建聯(lián)合索引index,實(shí)際上是建立3個(gè)索引,每個(gè)索引都包含A
A,B,C
A,B
A
列基數(shù),是指它所容納的所有非重復(fù)值的個(gè)數(shù),可以理解為 ?distinct(某列)后的結(jié)果
比如某個(gè)列包含值1,3,7,4,7,3,那么它的基數(shù)就是4了
列基數(shù)越大,重復(fù)值越少,需要建索引,因?yàn)槿绻沉械闹刀际侵貜?fù)的就沒(méi)必要建索引了
是(`DistriType`,`DistriButTime`) 這樣建?還是這樣建 (`DistriButTime`,`DistriType`) ?
count一下就知道了
count(distinct DistriType) ?與 count(distinct DistriButTime)比較
猜測(cè)肯定是前者<后者,所以聯(lián)合索引把DistriTyp放左邊更優(yōu)
再舉一個(gè)例子,一本字典,記錄了所有的姓名
分別用兩個(gè)字段,第一列:姓 ? ?第二列:名
很明顯 count(distinct 姓) 要比 count(distinct 名) 要少
因?yàn)榘偌倚眨帐现挥幸话賯€(gè),而名字可以自由組合很多個(gè)
劉 ? ?燁
劉 ? ?德華
劉 ? ?爾達(dá)
張 ? ?震
張 ? ?學(xué)友
所以如果要建立聯(lián)合索引,肯定是 ? key index ( 姓,名),先排姓氏,再排名字