我写了一个查询,在本地运行良好。当它是实时的,我得到这个错误:
错误1104:SELECT将检查过多的记录,并且可能需要很长时间。检查您的位置并使用SET OPTION如果SELECT正常,则SQL_BIG_SELECTS=1
我添加了SET SQL_BIG_SELECTS=1;
。它现在在工作,但运行得很慢。任何人都可以对我的查询进行排序吗,用ege代替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
提前感谢
LEFT表示"right"表可能没有"matching"行。然而,您不会用IS NULL或IS NOT NULL来检查是否存在。所以,我怀疑LEFT是没有必要的?(我提出这个问题是因为(1)它可能会分散对实际问题的注意力,(2)它可能减缓查询速度。)
如果LEFT是必需的,则ON tcs.scholar_id = sh.id
需要scholar_id
上的索引。(等)
此外,化合物指数INDEX(status, ain_status, deadline)
可能会有所帮助。