我写了一个查询,并在本地工作正常。当它出现时,我收到了这个错误:
错误1104:SELECT会检查太多记录而且可能 需要很长时间。检查您的WHERE并使用SET OPTION 如果SELECT正常,则SQL_BIG_SELECTS = 1
我添加了SET SQL_BIG_SELECTS=1;
。它现在正在运行,但运行速度非常慢。任何人都可以整理我的查询,而不是LEFT JOIN使用另一种方法。
这是我的问题:
SELECT sh.*,
ps.provider_name,
ps.photo_path AS photo
FROM scholarship sh
left join cat_category_sch ccs
ON ccs.scholar_id = sh.id
left join elg_countries_sch elg
ON elg.scholar_id = sh.id
left join study_level_sch sls
ON sls.scholar_id = sh.id
left join taken_country_sch tcs
ON tcs.scholar_id = sh.id
left join providers ps
ON ps.id = sh.provider
left join countires c1
ON c1.id = elg.county_id
left join countires c2
ON c1.id = tcs.county_id
left join study_level sl
ON sl.id = sls.study_level_id
WHERE sh.status = 1
AND sh.ain_status = 1
AND sh.deadline >= Date_sub(Now(), interval 1 year)
GROUP BY sh.id
ORDER BY sh.id DESC
提前致谢
答案 0 :(得分:0)
LEFT意味着'right'表可能没有'匹配'行。但是,您不会使用IS NULL或IS NOT NULL检查是否存在。所以,我怀疑LEFT是不必要的? (我提出了因为(1)它可能分散了真正的问题,(2)它可能会减慢查询速度。)
如果需要LEFT,则ON tcs.scholar_id = sh.id
需要scholar_id
上的索引。 (等)
复合指数INDEX(status, ain_status, deadline)
也可能有所帮助。