Mysql

mysql多列索引基數順序

  • July 3, 2015

MySQL 中的多列索引如何工作?它是如何在內部儲存的?考慮在兩列 (X,Y) 上具有多列索引的表。

如果 X 比 Y 具有高基數,即 X 比 Y 重複次數少,那麼多列索引 X,Y 或 Y,X 的順序應該是什麼。

如果是 X,Y,那麼具有相同 X 值的行數將會減少。這會提高性能,因為 X 的 B-tree 查找會更快嗎?

不確定這是否能回答您的問題,但我不會太在意 X 和 Y 的個體基數。對於索引設計,我將從索引應該協助的謂詞開始。如果您有以下疑問:

where X = ?
where Y = ? and X = ?  

與(X,Y)一起去。如果您有以下疑問:

where Y = ?
where Y = ? and X = ?  

與(Y,X)一起去。如果您的查詢是這樣的:

where X = ?
where Y = ?
where Y = ? and X = ?  

與(Y,X)和(X,Y)一起去。如果您的查詢是這樣的:

where X = ?
where Y = ?

與(X)和(Y)一起去

我在這裡假設每列的基數大於 1。對於一般基數,我認為完整的鍵基數(所有涉及的列一起)比單個基數更重要。

MySQL 仍然(我以為他們正在解決這個問題)要求在查詢中使用索引的最左邊部分:

http://dev.mysql.com/doc/refman/5.6/en/multiple-column-indexes.html

是的,你總是首先想要最高的基數。請注意,與 oracle 一樣,innodb 將其索引儲存在主索引之外的聚集葉子中,因此任何二級索引呼叫都將通過主索引。

引用自:https://dba.stackexchange.com/questions/87556