mysql中where条件中放比较运算符_1使用OR运算符查询在where子句vs多个查询中使用mysql中的where where where子句...

情况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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值