mysql索引中的多个列

时间:2012-09-17 16:09:17

标签: mysql sql database indexing

假设我有以下索引(来自SHOW INDEXES的输出):

Table, Non_unique, Key_name, Seq_in_index, Column_name, Collation, Cardinaity, etc etc
'tn', 1, 'Index1', 1, 'fid', 'A', 366, , '', '', 'BTREE', '', ''
'tn', 1, 'Index1', 2, 'obj_type', 'A', 366, , '', '', 'BTREE', '', ''
'tn', 1, 'Index1', 3, 'obj_id', 'A', 366, , '', '', 'BTREE', '', ''
'tn', 1, 'Index1', 4, 'rule', 'A', 366, , '', '', 'BTREE', '', ''

请注意,Index1中包含4列......

这样做是否可以让我获得一个列只有一个索引(比如fid)的所有性能优势?

换句话说,在一个索引中拥有这样的多列,而不是每个索引只有一列,有什么区别以及什么是好处/挫折.... IE的设置与上面的设置有什么不同

下面的设置
Table, Non_unique, Key_name, Seq_in_index, Column_name, Collation, Cardinaity, etc etc
'tn', 1, 'Index1', 1, 'fid', 'A', 366, , '', '', 'BTREE', '', ''
'tn', 1, 'Index2', 1, 'obj_type', 'A', 366, , '', '', 'BTREE', '', ''
'tn', 1, 'Index3', 1, 'obj_id', 'A', 366, , '', '', 'BTREE', '', ''
'tn', 1, 'Index4', 1, 'rule', 'A', 366, , '', '', 'BTREE', '', ''

请注意,在上面的场景中,每列都有自己的索引

哪一个会更快/更有效?

1 个答案:

答案 0 :(得分:1)

在某些情况下,多列索引可能会替换单独的单个索引。这实际上取决于知道如何查询表格,这将决定什么是最合适的。

如果您有关于列A,B和C的索引(按此顺序)。如果您在WHERE子句中使用以下任何字段组合,则将获得优化的索引性能。

A
A, B
A, B, C

请注意,为了在查看列B或C时使用索引,还必须在索引中使用其左侧的其他列。这些也必须以索引的正确顺序引用。

有关详细信息,请查看此处:

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