mysql百万数据查询用exists 代替 in 是一个好的选择:
select num from a where num in(select num from b)
用下面的语句替换:
select num from a where exists(select 1 from b where num=anum)
SQL查询语句优化方法:
1、应尽量避免在 where 子句中使用!=或<> *** 作符,否则将引擎放弃使用索引而进行全表扫描。
2、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
3、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0
4、尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num=10 or num=20
可以这样查询:
select id from t where num=10
union all
select id from t where num=20
5、下面的查询也将导致全表扫描:(不能前置百分号)
select id from t where name like ‘%c%’
若要提高效率,可以考虑全文检索。
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。
如果查询的两个表大小相当,那么用in和exists差别不大。
如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in
你还可以输入where id='1abc'也会查到id=1的那一行,因为列id是整数类型,你给出的字符串条件常量,系统会先把字符串转换为数值,'1,2,3'以及'1abc'转换为数值后都是1(系统尽可能的识别前面部分数字),明白了吧。
select \x0d\from test\x0d\where id in (1,2,3)\x0d\就是查询id=1 or id=2 or id=3的意思\x0d\也有\x0d\select \x0d\from test1\x0d\where id in (select id from test2)\x0d\这样的,意思是一样的
以上就是关于mysql百万数据查询 用什么代替in,该如何处理全部的内容,包括:mysql百万数据查询 用什么代替in,该如何处理、mysql查询语句in和exists二者的区别和性能影响、求教MySQL的in查询问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)