如何使我的mysql查询(带有许多左联接)执行得更快


How can I make my mysql query with many left joins execute quicker?

我写了一个查询,在本地运行良好。当它是实时的,我得到这个错误:

错误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)可能会有所帮助。