加入空临时表的MYSQL非常慢

时间:2015-02-19 14:06:47

标签: mysql

有谁知道为什么加入一个空的临时表非常慢?当我在临时表中有数据时,查询在0.2秒内运行,但是当临时表为空时,返回空表需要62秒。在我的代码中,table1是空表。加入一个空表应该总是导致一个空表,那么为什么这需要这么长时间呢?

drop table if exists table1;

CREATE TEMPORARY TABLE IF NOT EXISTS table1  AS
(
select 
    username, channelnumber, LINKEDCHANNELDATA.ID
from
    voijavuusers.tbluserdata USERDATA
        left join
    voijavuusers.tbllinkedchanneldata LINKEDCHANNELDATA ON USERDATA.userguid = LINKEDCHANNELDATA.userguid
where
    USERDATA.username = 'tatatata'
);



select 
    CALLDATA.id, 
    CALLDATA.chanid,
    POPUPDATA.textboxfield1
from
    trmsmain.tblcalldata CALLDATA
        left join trmsmain.tblpopupdata POPUPDATA on CALLDATA.recordguid = POPUPDATA.recordguid 
        join
    (select 
        username,
        channelnumber,
        ID
    from
        table1
    where
        username = 'tatatata') LINKEDCHANNELS ON CALLDATA.chanid = LINKEDCHANNELS.channelnumber
order by CALLDATA.id desc limit 100000;

1 个答案:

答案 0 :(得分:0)

这是一个关于如何优化查询的问题 - 查询计划。我建议删除TABLE1周围的子查询。这应该有助于优化器:

select cd.id, cd.chanid, pud.textboxfield1
from trmsmain.tblcalldata cd left join
     trmsmain.tblpopupdata pud
     on cd.recordguid = pud.recordguid join
     from table1 t1
     on cd.chanid = t1.channelnumber
where t1.username = 'Installer'
order by cd.id desc
limit 100000;

这并不能保证优化器会选择正确的执行路径,但它会为其提供更多信息。它不应该真正有所作为,但我也倾向于将table1放在from条款中。