博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Where条件的in里面放太多数据导致很慢
阅读量:4310 次
发布时间:2019-06-06

本文共 798 字,大约阅读时间需要 2 分钟。

比如:select * from TableA where ID in (42,216,219,230,231,220,249,250,221,251,252,217,253,255,256,254,257,258,1804)

52W数据,查询速度19386ms,好慢怎么办?程序都卡死了。

 

那么试一下百度搜索到的优化方式?

1.将in里面的ID分拆查询,再合并数据
select * from TableA where ID=42;select * from TableA where ID=216;……

然并卵,18663ms,还是好慢的

 

2.将in里面的ID放到临时表,再通过联合查询
select *  into #tmpClass from TableClass where QID in (42,216,219,230,231,220,249,250,221,251,252,217,253,255,256,254,257,258,1804);select * from TableA inner join #tmpClass on TableA.QID=#tmpClass.QID

33570ms,没用

 

总结:

1.没用找到特别能优化的方法。而事实上,程序业务并不需要查询表里面所有的字段*,把*改为自己需要的那几个字段,则很快查询出来。in查询(140ms),分拆单独查询(263ms)。

2.去掉没有数据的QID并没有影响到查询的速度。比如42、216,,219是没有数据的,去不去掉都没看见有什么影响,也许是自己数据量小吧。

 

通过此次优化,觉得以后可能很多程序上的sql写法就不要贪方便直接写*号了,以后优化也许会根据业务功能逐个进行优化,大而全的优化也许大概也有个上限。

 

转载于:https://www.cnblogs.com/hougelou/p/4710678.html

你可能感兴趣的文章
docker 启动已经停止的容器
查看>>
order by 排序原理及性能优化
查看>>
Lock重入锁
查看>>
docker安装 rabbitMq
查看>>
git 常用命令 入门
查看>>
关闭selinx nginx无法使用代理
查看>>
shell 脚本部署项目
查看>>
spring cloud zuul网关上传大文件
查看>>
springboot+mybatis日志显示SQL
查看>>
工作流中文乱码问题解决
查看>>
java并行流
查看>>
mysql查询某一个字段是否包含中文字符
查看>>
Java中equals和==的区别
查看>>
阻塞队列
查看>>
linux的基础知识
查看>>
PCB设计技巧与注意事项
查看>>
main函数带参数
查看>>
关于PCB设计中过孔能否打在焊盘上的两种观点
查看>>
京东技术架构(一)构建亿级前端读服务
查看>>
php 解决json_encode中文UNICODE转码问题
查看>>