SELECT 
        DISTINCT c.uniqueid,
r.`name`,
r.CustomerPhone,
r.TocallerPhone,
r.bound,
r.Elapsed,
r.LastTime,
s.sourceName,
c.uniqueid,
c.recordingfile,
c.calldate
FROM
cdr c
JOIN recordInfo r ON c.uniqueid = r.niqueid
LEFT JOIN Source s ON r.callerIdNum = s.MobileNum
WHERE
1 = 1
AND c.disposition != 'NO ANSWER'
LIMIT 0, 10SELECT
count(DISTINCT uniqueid)
FROM
cdr c
JOIN recordInfo r ON c.uniqueid = r.niqueid
LEFT JOIN Source s ON r.callerIdNum = s.MobileNum
WHERE
1 = 1
AND c.disposition != 'NO ANSWER'

解决方案 »

  1.   

    查看执行计划加Order By排序列非默认排序,慢是正常的
      

  2.   

    目前差不多有30w数据,我只想加个orderby  时间   ,就要12秒多,  orderby一拿掉就0.001
      

  3.   

    数据量大,order by 是需要整个排序好,所以慢。
      

  4.   


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

  5.   


    光加索引也不一定能用上。上面也说了,之所以快是因为limit 就是这个效果,快是正常的,慢才是怪事。加上了order by之后,情况完全变化,如果查询出来有10w条数据,会先排序,然后取出前10条,所以这个时候,加个索引可能会有用,但是由于mysql本身的功能还不是很强,有可能这个索引加上了,mysql也不会去用。如果是sql server,加上了一般都能用上。你自己在多尝试吧,优化这个需要投入很多时间和精力,真给你优化出来,你的水平就上去了,大家只是给你出谋划策,关键还得靠你自己。