mysql where条件使用了or会不会扫全表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql where条件使用了or会不会扫全表相关的知识,希望对你有一定的参考价值。
是的但是使用索引在某些情况下可以避免的:
1、where 语句里面如果带有or条件, myisam表能用到索引, innodb不行。
2、必须所有的or条件都必须是独立索引
3、用UNION替换OR (适用于索引列)
4、用in来替换or 参考技术A 不管用不用都会扫全表,如果or是另一字段,扫两遍
mysql调优
mysql调优 一:避免全表扫描 在 where order by涉及字段设置索引 1.where 条件中避免使用 != > < ,否则将引擎放弃使用索引而进行全表扫描。 2.避免where条件对null判断 ,否则将引擎放弃使用索引而进行全表扫描。 可以将null设置成 0 表示 3.where 条件避免or 来判断 ,否则将引擎放弃使用索引而进行全表扫描。 select id from tablename where name=‘Tom‘ or name=‘Que‘ Error select id from tablename where name=‘Tom‘ union all (联合查询) select id from tablename where name=‘Que‘ True 4.不能模糊查询,否则将引擎放弃使用索引而进行全表扫描。 select id from tablename where like ‘%ang%‘ Error 若要提高效率,可以考虑全文检索。 5.in not in用法 select id from tablename where score in(90,91,92) Error 对于连续的数字可以用between select id from tablename where score between 90 and 91 6.避免修改字段的值,否则将引擎放弃使用索引而进行全表扫描。 select name from tablename where score+1=60 Error select name from tablename where score=60-1 True where 条件 ‘=‘左边不能进行函数表达式计算,则将引擎放弃使用索引而进行全表扫描。 -- 在where语句尽量避免对字段进行函数操作 7.很多时候用 exists 代替 in 是一个好的选择 select name from tablename wherer name in(select name from tablename1) Erroe select name from tablename where exists(select name from tablename1 where name=tablename.name) True
以上是关于mysql where条件使用了or会不会扫全表的主要内容,如果未能解决你的问题,请参考以下文章