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 条记录.
任何有关此事的帮助表示赞赏.
直接联接将为您过滤它并提高效率:
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_id和events.id进一步帮助.