什么是首选?取两列并将它们一起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';
最好的问候,
安德鲁
答案 0 :(得分:2)
与所有索引编制一样,这取决于您的具体情况。
就我个人而言,我会选择两个列,一个索引版本,因为它在考虑数据时更正确,使查询更清晰,允许在需要时进行范围选择等。复合参考列很可能是varchar类型,而两个单独的可以是一个int和一个varchar,即使它是两个比较,我相信会更快..
如果没有user_id
,你会在key
上查询吗? IE返回特定用户的所有首选项。
您是否会对具有特定设置的所有用户执行范围查询,或使1_something
效率低下? (将varchars与一系列值进行比较==效率低下)
如果不知道您可能想要运行的其他查询,预期的表格大小,样本值等等,则无法确定。
答案 1 :(得分:0)
第一个(2列索引)看起来好多了。此索引还将用于受益于user_id
索引的查询。如果有一个额外的列,则每次user_id
或something
更改时都必须同步其值。
答案 2 :(得分:0)
第一个总是更好,如果您只使用一列user_id进行查询,那么您仍然可以使用相同的索引。和复合键索引也提供了更好的键搜索。