我有一个超过1M行的表。
目前,它包含一个复合索引代码:,UserIdentifier)。使用这两列进行搜索是非常常见的,所以这个复合索引是有意义的。
我还需要能够搜索以下内容:WHERE Code = 'someCode' AND Name LIKE 'ABC%'
。<<strong>名称/strong>列将始终使用"%"搜索词后的.
我假设只是在Name上添加INDEX,这意味着在执行SELECT时,引擎将使用复合索引代码(,UserIdentifier)首先通过Code进行筛选,然后使用索引在名称,根据LIKE子句进行过滤。另一种情况是在现有的复合索引之外添加另一个复合索引(Code)名字,),我想会更快。但是,我担心,由于Code列在本例中是两个复合索引的一部分,因此它可能会降低总体性能。
下面哪个索引最有意义,并且最快?考虑到已经存在列(Code
,UserIdentifier
)的复合索引:
- INDEX (
Name
) - index (
Code
,Name
) - index (
Name
,Code
)
谢谢!
Ergest Basha上面的评论是正确的。(Code, Name)
上的索引最有可能是有帮助的。
用相同的第一列创建两个索引是没有问题的。它们可能对不同的查询都有用,并且值得为这两个索引增加额外的存储空间。
应该使用EXPLAIN来分析查询是如何使用索引的。没有必要在这里问堆栈溢出,你应该自己测试一下。
MySQL通常在给定的查询中每个表引用只使用一个索引(有一个"索引合并优化")。但它并不像你想象的那样经常发作)。
你可能会喜欢我的演讲如何设计索引,真的或视频。