mysql 加了orderby 查询速度超级慢怎么办

[复制链接]
查看11 | 回复9 | 2021-1-27 07:16:22 | 显示全部楼层 |阅读模式
SELECT
DISTINCTc.uniqueid,
r.`name`,
r.CustomerPhone,
r.TocallerPhone,
r.bound,
r.Elapsed,
r.LastTime,
s.sourceName,
c.uniqueid,
c.recordingfile,
c.calldate
FROM
cdrc
JOINrecordInforONc.uniqueid=r.niqueid
LEFTJOINSourcesONr.callerIdNum=s.MobileNum
WHERE
1=1
ANDc.disposition!='NOANSWER'
LIMIT0,10

SELECT
count(DISTINCTuniqueid)
FROM
cdrc
JOINrecordInforONc.uniqueid=r.niqueid
LEFTJOINSourcesONr.callerIdNum=s.MobileNum
WHERE
1=1
ANDc.disposition!='NOANSWER'
分 -->
回复

使用道具 举报

千问 | 2021-1-27 07:16:22 | 显示全部楼层
查看执行计划
加OrderBy排序列非默认排序,慢是正常的
回复

使用道具 举报

千问 | 2021-1-27 07:16:22 | 显示全部楼层
目前差不多有30w数据,我只想加个orderby时间,就要12秒多,orderby一拿掉就0.001
回复

使用道具 举报

千问 | 2021-1-27 07:16:22 | 显示全部楼层
1.适当将排序字段加上索引
回复

使用道具 举报

千问 | 2021-1-27 07:16:22 | 显示全部楼层
数据量大,orderby是需要整个排序好,所以慢。
回复

使用道具 举报

千问 | 2021-1-27 07:16:22 | 显示全部楼层
引用3楼gong_jian628的回复:1.适当将排序字段加上索引那啥,可以给我个你的联系方式吗有事找你.....急
回复

使用道具 举报

千问 | 2021-1-27 07:16:22 | 显示全部楼层

不加orderby之所以快,是由于limit0,10
而加了orderby之后,会把所有结果都排序,然后再取前10条,逻辑上完全不一样,查询结果也会不同。
要想速度快,可以先试试在orderby字段上加个索引试试
回复

使用道具 举报

千问 | 2021-1-27 07:16:22 | 显示全部楼层
索引都加了,心塞塞
回复

使用道具 举报

千问 | 2021-1-27 07:16:22 | 显示全部楼层
你看一下执行计划,有没有用索引
回复

使用道具 举报

千问 | 2021-1-27 07:16:22 | 显示全部楼层
引用7楼qq_17121221的回复:索引都加了,心塞塞
光加索引也不一定能用上。
上面也说了,之所以快是因为limit就是这个效果,快是正常的,慢才是怪事。
加上了orderby之后,情况完全变化,如果查询出来有10w条数据,会先排序,然后取出前10条,所以这个时候,加个索引可能会有用,但是由于mysql本身的功能还不是很强,有可能这个索引加上了,mysql也不会去用。
如果是sqlserver,加上了一般都能用上。
你自己在多尝试吧,优化这个需要投入很多时间和精力,真给你优化出来,你的水平就上去了,大家只是给你出谋划策,关键还得靠你自己。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行