假设表结构如下,我想知道最好是单独索引列还是分组索引列:
tbl_id | column1 | column2 | column3 | column4 | column 5
---------------------------------------------------------
1 | 'aaa' | 'bbb' | 'ccc' | 'ddd' | 'eee'
2 | 'bbb' | 'ccc' | 'ddd' | 'eee' | 'fff'
3 | 'ccc' | 'ddd' | 'eee' | 'fff' | 'ggg'
4 | 'ddd' | 'eee' | 'fff' | 'ggg' | 'hhh'
5 | 'eee' | 'fff' | 'ggg' | 'hhh' | 'iii'
我可能会在 where 语句中一起使用 column1
、column2
和 column3
(WHERE column1 = 'val' AND column2 = 'val' AND column3 = 'val'
或 WHERE CONCAT(column1, ' ', column2, ' ', column3) = 'val val val'
<= 我认为这是相当不切实际的)。在特殊情况下,我可能还会将 column4
与前 3 列结合使用。
所以我的问题是:
我应该将其中的 4 个一起编入索引吗?
CREATE INDEX index_name ON tbl (column1, column2, column3, column4)
...
;我应该索引前 3 列,然后分别索引第四列吗?
CREATE INDEX index_name_1 ON tbl (column1, column2, column3)
...
;CREATE INDEX index_name_2 ON tbl (column4)
...
;我应该分别为所有 4 个索引吗?
CREATE INDEX index_name_1 ON tbl (column1)
...
;CREATE INDEX index_name_2 ON tbl (column2)
...
;CREATE INDEX index_name_3 ON tbl (column3)
...
;CREATE INDEX index_name_4 ON tbl (column4)
...
;我应该分组索引它们,然后单独索引它们吗?
CREATE INDEX index_name ON tbl (column1, column2, column3, column4)
...
;CREATE INDEX index_name_1 ON tbl (column1)
...
;CREATE INDEX index_name_2 ON tbl (column2)
...
;CREATE INDEX index_name_3 ON tbl (column3)
...
;CREATE INDEX index_name_4 ON tbl (column4)
...
;
我的理解是,如果我要单独为它们编制索引,这在单独搜索/连接它们的情况下会非常有用(即:WHERE column1 = 'val'
)。希望我可以通过索引清除我的知识,谢谢。
最佳答案
您应该将条件表达为:
WHERE column1 = 'val' AND column2 = 'val' AND column3 = 'val'
适当的索引是 (column1, column2, column3)
上的复合索引。这三列在索引中的顺序并不重要。您可以将 column4
添加为索引中的最终键。
如果您使用 concat()
函数,则 MySQL 无法利用您建议的任何索引。
关于mysql - 我应该单独还是成组索引列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47586063/