情况1:
在where子句中使用OR运算符进行1次查询
select * from users where name =’smith’或nick =’smith'(使用index_merge)
案例2:
where子句中的多个查询相等条件
select * from users where name =’smith’; (使用单一索引);
从nick =’smith’的用户中选择*; (使用单一索引);
case2中有很多性能损失吗?
解决方法:
在这些情况下使用UNION是一种常见的优化(至少在必须使用单个查询时):
select * from users where name='smith' /* using single index */
UNION
select * from users where nick='smith'; /* using single index */
根据我的经验,我不喜欢依赖index_merge(union),因为性能通常不如上面那样做显式的UNION技巧.
但每种情况可能会略有不同,因为性能可能取决于每个条件匹配的行数.
@jynus在下面的评论中是正确的,该问题是关于为UNION创建的临时表.
我还想补充说,很难为什么类型的查询更快地制定一般规则.这取决于您查询的数据量,您使用的软件版本,操作系统和调优,以及每秒同时运行的查询数量.
回答这些问题的唯一可靠方法是在您的服务器上根据您的数据自行测试多种解决方案.
标签:mysql,index
来源: https://codeday.me/bug/20190806/1596950.html