【发布时间】:2015-05-01 06:00:55
【问题描述】:
我有两张桌子:
module_339 (id,name,description,etc)
module_339_schedule(id,itemid,datestart,dateend,timestart,timeend,days,recurrent)
module_339_schedule.itemid 指向 module_339
一桌会议室
第二个保留会议日程
module_339 有 3 个项目
module_339_schedule 有 4000 多个项目 - 几乎平分在 3 个会议之间
我有一个存储函数 - “getNextDate_module_339” - 它将计算指定会议的“下一个日期”,以便能够显示它并按它排序 - 如果用户想要的话。这个存储过程将只获取指定会议的所有日程条目并循环它们,比较日期和时间。因此,它会从 module_339_schedule 中进行一次简单的读取,然后遍历项目并比较日期和时间。
问题:这个查询很慢:
SELECT
distinct(module_339.id)
,min( getNextDate_module_339(module_339.id,1,false)) AS ND
FROM
module_339
LEFT JOIN module_339_schedule on module_339.id=module_339_schedule.itemid /* standard schedule adding */
WHERE 1=1 AND module_339.is_system_preview<=0
group by
module_339.id
order by
module_339.id asc
如果我删除函数调用或 LEFT JOIN,它又会很快。 我在这里做错了什么?似乎是函数调用和左连接之间的某种“冲突”。
【问题讨论】: