两列索引为一列,或一列索引

时间:2011-01-17 22:53:08

标签: mysql performance indexing

什么是首选?取两列并将它们一起INDEX,或者创建一个新列和INDEX那列?例如:

INDEX(user_id, key)

然后运行:

SELECT value FROM preferences WHERE user_id = 1 AND key = 'something';

或者创建另一个名为reference的列,其中包含值1_something,然后运行:

SELECT value FROM preferences WHERE reference = '1_something';

最好的问候,
安德鲁

3 个答案:

答案 0 :(得分:2)

与所有索引编制一样,这取决于您的具体情况。

就我个人而言,我会选择两个列,一个索引版本,因为它在考虑数据时更正确,使查询更清晰,允许在需要时进行范围选择等。复合参考列很可能是varchar类型,而两个单独的可以是一个int和一个varchar,即使它是两个比较,我相信会更快..

如果没有user_id,你会在key上查询吗? IE返回特定用户的所有首选项。

您是否会对具有特定设置的所有用户执行范围查询,或使1_something效率低下? (将varchars与一系列值进行比较==效率低下)

如果不知道您可能想要运行的其他查询,预期的表格大小,样本值等等,则无法确定。

答案 1 :(得分:0)

第一个(2列索引)看起来好多了。此索引还将用于受益于user_id索引的查询。如果有一个额外的列,则每次user_idsomething更改时都必须同步其值。

答案 2 :(得分:0)

第一个总是更好,如果您只使用一列user_id进行查询,那么您仍然可以使用相同的索引。和复合键索引也提供了更好的键搜索。