Mysql
mysql多列索引基數順序
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 將其索引儲存在主索引之外的聚集葉子中,因此任何二級索引呼叫都將通過主索引。