mysql百万数据查询 用什么代替in,该如何处理

mysql百万数据查询 用什么代替in,该如何处理,第1张

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查询问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10189507.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存