帮忙优化此SQL,查询耗时1小时以后无返回结果

ov100 发布于 2014/06/20 16:30
阅读 488
收藏 1

查询特别慢,以上SQL语句查询1小时都没结果返回

业务需要grard_event_20140620表中2014-06-20 15:40:00到2014-06-20 16:0:59时间段中的记录中的手机号去匹配t_mobileno表,返回存在t_mobileno表中的记录。

表结构如下

grard_event_20140620表(共2137164条)

索引


t_mobileno表(共5555109


加载中
0
英年有点儿肥
英年有点儿肥
inner join及之后的sql改成where exists(select 1 from t_mobileno b where a.msisdn = b.mobileno),再试试
o
ov100
改为exists也一样慢
开源中国首席----
开源中国首席----
据我看到网上的优化实例,都是从业务着手的!!单纯改sql的函数,作用不大!
0
开源中国首席----
开源中国首席----
你就贴这点东西,数据库专家都优化不了,没业务,表里有多少条数据,表结构是怎样的?。。。唉。要学会提问?不要浪费大家时间
0
dreamers
dreamers
为啥有索引都还要扫描500多万行的数据?(第二个)
0
dreamers
dreamers

1.尽可能不要在复杂的查询中进行计算 ,

2.尽可能不要使用 between ...and...

o
ov100
between '2014-6-20 15:38:0' and '2014-6-20 15:58:59' group by mobiles ,signature,200ms左右
若水尘埃
若水尘埃
后面那句谁说的?
0
泡不烂的凉粉
泡不烂的凉粉

msyql 对于 select xxx from (select ...) ... 这样的操作,总是无休止的建立临时表。

还不如直接点。

select ... from txxx A where A.msisdn in(select  distinc mobile_no from gxxx where ....);

0
e
emund
连接5百几万行数据的表,怎么优化都快不到哪里去! 
0
x01234567890
x01234567890
用tcl脚本处理。
0
南湖船老大
南湖船老大

不要在SQL里用函数啊;我感觉时间戳类型要比datetime类型要好;改下my.cnf配置,增加排序空间的大小;换SSD硬盘

0
自由之信
自由之信

必须分页,这个数量太大了。一般不需要把所有的数据都提取出来,即便是需要,也可以分页循环几次来得到数据,别说执行速度,就是内存也会消耗很大的。

返回顶部
顶部