嵌套查询优化

mdo*_*nko 0 mysql database

SELECT id
FROM `events` 
WHERE heading LIKE '%somestr%'
AND guests_since_start > 10
AND (SELECT COUNT(*)
FROM `submissions`
WHERE `submissions`.event_id = `events`.id)!=0;
Run Code Online (Sandbox Code Playgroud)

目前,此查询崩溃了我的服务器.我的想法是从事件表中获取所有id在提交表中具有相应行的事件(事件和提交由event_it链接.只要行数不为0,那么我希望显示这些记录.

问题是该events表有大约3,000条记录,而该submissions表大约有290,000 条记录.

任何有关此事的帮助表示赞赏.

Mat*_*t S 5

直接联接将为您过滤它并提高效率:

SELECT DISTINCT id
FROM `events` 
    INNER JOIN `submissions` 
    ON `submissions`.event_id = `events`.id
WHERE heading LIKE '%somestr%'
AND guests_since_start > 10
Run Code Online (Sandbox Code Playgroud)

DISTINCT需要过滤掉重复项.这有点降低了效率(因为MySQL现在必须删除重复),但总的来说它会比任何子查询快得多.在指标submissions.event_idevents.id进一步帮助.