mysql使用优化记录

数据库优化

使用IN时

使用IN语句,IN的列表明确并且有限时,可以使用。因为此时搜索引擎会使用索引,但IN的是一个查询结果时,索引将会没有作用,会查询全表。
例子:

使用IN查询时,IN的列表有限且明确

SELECT *
  FROM `on_auction`
 WHERE `pid` in(10, 11, 20) ;

此时的执行计划,会使用建立在pid上的索引
执行计划

SELECT *
  FROM `on_auction`
WHERE `pid` in (
	SELECT gid FROM `on_attention`
 	WHERE uid= 7
 );

此时的执行计划,可以看到对于主表是全表查询的,索引也没有使用
执行计划
这种情况下,可以使用join的方式进行优化

select a.*
  from on_auction a,
       on_attention b
 where a.pid= b.gid
   and b.uid= 7

执行计划
优化完可以看到,此时已经不会全表查询,而是使用了索引

所以综上所述,in也可以使用,但是在不同的使用情况时要做优化,否则会全表查询

注:上述所有的执行计划是基于阿里云的DMS处理的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值