数据库优化
使用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处理的。