我有一个超过100万行的表。
当前,它包含一个复合索引:(Code,UserIdentifier)。使用这两列进行搜索是非常常见的,因此这种复合索引是有意义的。
我还需要能够搜索以下内容:WHERE Code = 'someCode' AND Name LIKE 'ABC%'
。搜索Name列时,将始终在搜索词后加上“%”。
我假设简单地在Name上添加一个INDEX意味着当执行SELECT时,引擎将使用复合索引(Code,UserIdentifier)首先按代码进行筛选,然后对Name使用索引,以基于LIKE子句进行筛选。另一种情况是在现有复合索引之外添加另一个由两个(Code,Name)组成的复合索引,我认为会更快。但是,我担心由于Code列在这种情况下是两个复合索引的一部分,因此可能会降低整体性能。
考虑到已经存在列(Code
,UserIdentifier
)的复合索引这一事实,下面哪个索引在这里最有意义,而且速度最快:
1.索引(Name
)
1.索引(x1米4英寸,x1米5英寸)
1.索引(x1米6英寸,x1米7英寸)
谢谢大家!
1条答案
按热度按时间pnwntuvh1#
Ergest Basha上面的评论是正确的,
(Code, Name)
上的索引最有可能有帮助。用相同的第一列创建两个索引是没有问题的,它们可能对不同的查询都有用,而且值得为这两个索引增加额外的存储空间。
你应该使用EXPLAIN来分析查询是如何使用索引的。没有必要在这里询问堆栈溢出,你应该自己测试它。
MySQL通常在给定的查询中对每个表引用只使用一个索引(有一个“index merge optimization“,但它并不像您想象的那样频繁)。
你可能会喜欢我的演示文稿How to Design Indexes, Really或video。