sql 语句优化求帮助

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

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

3722 次点击
所在节点    MySQL
27 条回复
linauror
2016-07-13 18:05:04 +08:00
加索引呢
Volio
2016-07-13 18:05:47 +08:00
手机号给个索引试试
baiyi
2016-07-13 18:06:04 +08:00
@linauror 索引加了
liprais
2016-07-13 18:09:31 +08:00
把这 1000 多手机号建个表写进去,手机号建成主键 ,然后查询的时候 join 下
hpeng
2016-07-13 18:14:37 +08:00
针对手机号函数索引。
baiyi
2016-07-13 19:50:45 +08:00
跟同事讨论了下 觉得数据结构造成了这种查询语句是不科学的,而且还无法改变结构,索引也加了 效果不好,结贴了 想一想其他的方向
harborM
2016-07-13 20:02:15 +08:00
之前我的业务也做到一个 in 千量级的 sql 语句,也没什么办法
loading
2016-07-13 20:07:38 +08:00
你数据库一共有多少条手机号码。
baiyi
2016-07-13 20:22:24 +08:00
@loading 8000 多 需要从中拿 X 个去另外的表中 in 查询
@harborM 是啊,在结构不能动的情况下,想不到什么办法
loading
2016-07-13 20:45:09 +08:00
另一个表有多少条呢?
hbprotoss
2016-07-13 20:58:36 +08:00
执行计划能放上来麽
heaton_nobu
2016-07-13 22:20:58 +08:00
用 join 会快很多
realpg
2016-07-13 23:18:52 +08:00
非常慢是多慢?
jswh
2016-07-13 23:39:46 +08:00
超长的 in 查询要么和上面网友说的一样用 join 的方式做交集,要么就直接接搜索引擎吧, sphinx 或者 elasticsearch
fatpa
2016-07-14 03:07:35 +08:00
explain 看看 select 的结果先把
ahm
2016-07-14 08:48:08 +08:00
把一千个号码建个视图,然后用 left join 会不会快些呢
ahm
2016-07-14 08:49:56 +08:00
然后再号码上建立索引
baiyi
2016-07-14 09:30:34 +08:00
感谢~
目前进展是发现了 mysql5.7 能提高效率.从 9s 到 1.6s....
Asan
2016-07-14 09:33:25 +08:00
程序分批处理呢?
baiyi
2016-07-14 09:59:10 +08:00
@Asan 程序分批处理感觉对于我们的结构来说不太可行

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

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

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

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

© 2021 V2EX