sql 语句优化求帮助

2016-07-13 17:59:04 +08:00
 baiyi

项目有个需求 要用多个(目前测试为 1000 多)手机号去查找所属人员,where in () 里多达 1000 多个手机号,导致查询速度非常慢,有什么可以优化的地方吗

3896 次点击
所在节点    MySQL
27 条回复
Lao9
2016-07-14 10:08:57 +08:00
in-list ,就是构建数组跟基表进行类似索引联合的查询行为,这个依靠具体的数据库。如果没有类似功能、你可以自己手工实现类似的工作。否则数据库自己会去做这个事情无需操心
shakusi
2016-07-14 11:23:17 +08:00
你这(目前测试为 1000 多)些号码有没有一些共同的规律,比如属于哪些段( 13700001001~13700002001 )这种,或者号码属于哪些区域,如果 where 条件后面加 in ,你的 SQL 语句不是也很长?
能否换个思路,把 8000 条数据取出来,然后通过程序去过滤掉这 1000 条出来,比较下性能哪个更快?
wander2008
2016-07-14 11:25:32 +08:00
in 里面 1000 多个值…
billgreen1
2016-07-14 11:44:14 +08:00
1. 把你的表结构贴出来
2. 把你的 sql 语句贴出来

按道理没这么慢的,我现在从 6million 中查 2000 个都在 0.0X 秒
loading
2016-07-14 12:34:49 +08:00
居然是 9s ……不是语句有问题就是机器有问题
baiyi
2016-07-14 17:26:41 +08:00
@Lao9 嗯,我去看一下
@shakusi 并没有规律,过滤的话对于也不仅仅是 8000 条数据
@loading 嗯 应该是语句的问题 感觉 mysql5.7 提升这么大是帮助优化语句了
mingyun
2016-07-23 20:41:54 +08:00
@baiyi 线上数据库没那么容易直接升级吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/292286

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX