Php 如何使我的mysql查询与许多左连接执行得更快?

Php 如何使我的mysql查询与许多左连接执行得更快?,php,mysql,Php,Mysql,我已经写了一个查询,在本地运行良好。当它处于活动状态时,我会遇到以下错误: 错误1104:SELECT将检查太多记录,并且可能 要花很长时间。检查您的WHERE和use SET选项 如果选择正确,则SQL\u BIG\u SELECTS=1 我添加了SET SQL\u BIG\u SELECTS=1;。它现在正在工作,但运行速度很慢。任何一个可以整理我的查询,ege而不是左连接使用另一种方法。 这是我的疑问: SELECT sh.*, ps.provider_name,

我已经写了一个查询,在本地运行良好。当它处于活动状态时,我会遇到以下错误:

错误1104:SELECT将检查太多记录,并且可能 要花很长时间。检查您的WHERE和use SET选项 如果选择正确,则SQL\u BIG\u SELECTS=1

我添加了SET SQL\u BIG\u SELECTS=1;。它现在正在工作,但运行速度很慢。任何一个可以整理我的查询,ege而不是左连接使用另一种方法。 这是我的疑问:

    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  

提前感谢

左表示“右”表可能没有“匹配”行。但是,您不会使用IS NULL或IS NOT NULL检查是否存在。所以,我怀疑离开是没有必要的?我提出这个问题是因为1它可能会分散人们对真实问题的注意力,2它可能会减慢查询速度

如果需要LEFT,那么在tcs.scholar\u id=sh.id上需要一个scholar\u id.等的索引


此外,复合指数指数状态、ain_状态、截止日期也可能有所帮助。

首先。。。最后三个左连接似乎没有用处,因为您没有使用这些数据,所以不需要使用它们。这可能会提高查询的运行时间。向我们展示带有任何索引的表结构,并对查询运行解释,以显示MySQL是如何执行itlast 3 join的,这也是必需的,因为在某些情况下,我在这些表上使用了where条件,所以我在上面的查询中这样做,我删除了一些where条件。在每个表中,我都将indexauto增量作为ID进行维护。谢谢您的更新,但我无法得到您1。添加我建议的索引。2.请向我们描述为什么您使用LEFT JOIN而不是JOIN。谢谢@rick。在每个具有索引(即id自动递增)的表中。我不知道哪一个更好,要么是左撇子,要么是左撇子;试试加入吧。查看输出是否有任何差异;可能没有。如果希望输出一行,即使右表中没有匹配的行,也可以使用LEFT JOIN。