有谁知道为什么加入一个空的临时表非常慢?当我在临时表中有数据时,查询在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;
答案 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
条款中。