列上的复合索引或单一索引



我有一个超过1M行的表。

目前,它包含一个复合索引代码:,UserIdentifier)。使用这两列进行搜索是非常常见的,所以这个复合索引是有意义的。

我还需要能够搜索以下内容:WHERE Code = 'someCode' AND Name LIKE 'ABC%'。<<strong>名称/strong>列将始终使用"%"搜索词后的.

我假设只是在Name上添加INDEX,这意味着在执行SELECT时,引擎将使用复合索引代码(,UserIdentifier)首先通过Code进行筛选,然后使用索引名称,根据LIKE子句进行过滤。另一种情况是在现有的复合索引之外添加另一个复合索引(Code)名字,),我想会更快。但是,我担心,由于Code列在本例中是两个复合索引的一部分,因此它可能会降低总体性能。

下面哪个索引最有意义,并且最快?考虑到已经存在列(Code,UserIdentifier)的复合索引:

  1. INDEX (Name)
  2. index (Code,Name)
  3. index (Name,Code)

谢谢!

Ergest Basha上面的评论是正确的。(Code, Name)上的索引最有可能是有帮助的。

用相同的第一列创建两个索引是没有问题的。它们可能对不同的查询都有用,并且值得为这两个索引增加额外的存储空间。

应该使用EXPLAIN来分析查询是如何使用索引的。没有必要在这里问堆栈溢出,你应该自己测试一下。

MySQL通常在给定的查询中每个表引用只使用一个索引(有一个"索引合并优化")。但它并不像你想象的那样经常发作)。

你可能会喜欢我的演讲如何设计索引,真的或视频。

最新更新