Php uery PRODUCT?@eggyal在生产中,当前将返回975个结果。我发现在文件存储表中有一个复合索引(模型、外键)。尝试只在模型上添加索引。@Daan我只为模型添加了一个索引,但似乎没有什么作用。基数是20。两个表都有多少列和记录?你能把桌子贴出来

Php uery PRODUCT?@eggyal在生产中,当前将返回975个结果。我发现在文件存储表中有一个复合索引(模型、外键)。尝试只在模型上添加索引。@Daan我只为模型添加了一个索引,但似乎没有什么作用。基数是20。两个表都有多少列和记录?你能把桌子贴出来,php,mysql,sql,join,query-optimization,Php,Mysql,Sql,Join,Query Optimization,uery PRODUCT?@eggyal在生产中,当前将返回975个结果。我发现在文件存储表中有一个复合索引(模型、外键)。尝试只在模型上添加索引。@Daan我只为模型添加了一个索引,但似乎没有什么作用。基数是20。两个表都有多少列和记录?你能把桌子贴出来吗?很有趣。您能说几句话解释一下将ON条件移动到WHERE的目标吗?这个查询是由一个框架(CakePHP)生成的,因此理解更高的目的将有助于我欺骗它,让它做我想做的事情。当你在连接中进行操作时,计划者可能必须从表中选择,按“True”部分过滤,


uery PRODUCT?@eggyal在生产中,当前将返回975个结果。我发现在
文件存储
表中有一个复合索引(模型、外键)。尝试只在
模型
上添加索引。@Daan我只为
模型
添加了一个索引,但似乎没有什么作用。基数是20。两个表都有多少列和记录?你能把桌子贴出来吗?很有趣。您能说几句话解释一下将
ON
条件移动到
WHERE
的目标吗?这个查询是由一个框架(CakePHP)生成的,因此理解更高的目的将有助于我欺骗它,让它做我想做的事情。当你在连接中进行操作时,计划者可能必须从表中选择,按“True”部分过滤,然后连接结果集。要查看的数据很多,而且它不能有效地使用索引。如果在WHERE子句中执行此操作,则计划员将选择更高效的路由(即预筛选数据集)。(这个故事中的索引是PrimaryPhoto.foreign_key)我仍在研究是否有办法使用CakePHP定制条件下的
。但与此同时,我先发制人地将
PrimaryPhoto.model='PrimaryListingPhoto'
添加到
WHERE
子句中,它似乎帮助很大!MySQL是否足够聪明,可以在两者都存在时使用WHERE而不是ON?您是否有其他想法来解释为什么它可能已经起作用了(在删除
上有问题的
之前)?您是否看到我对Daan上述答案的评论?好奇这是否与您的建议有任何交互作用。将
PrimaryPhoto.model='PrimaryListingPhoto'
移动到
where
子句将
join
更改为内部联接。这是另一个问题。谢谢!您是如何确定索引列的顺序的?@SDP。从
中的相等条件开始,其中
。然后,从
where
order by
中选择一个不等式。如果是后者,请祈祷它会被使用。
SELECT  Listing.*,  PrimaryPhoto.* 
 FROM listings AS Listing  
 LEFT JOIN file_storage AS PrimaryPhoto  
 ON (PrimaryPhoto.foreign_key  =  Listing.ID  
 AND  PrimaryPhoto.model  = 'PrimaryListingPhoto') 
 WHERE  Listing.rent  >= 0 
 AND  Listing.rent  <= 5000 
 AND  Listing.beds  >= 1 
 AND  Listing.is_active  = '1' 
 ORDER BY Listing.modified  DESC
SELECT  Listing.*,  PrimaryPhoto.* 
 FROM listings AS Listing  
 LEFT JOIN file_storage AS PrimaryPhoto  
 ON PrimaryPhoto.foreign_key  =  Listing.ID
 WHERE  Listing.rent  >= 0 
 AND  Listing.rent  <= 5000 
 AND  Listing.beds  >= 1 
 AND  Listing.is_active  = '1' 
 AND  PrimaryPhoto.model  = 'PrimaryListingPhoto'
 ORDER BY Listing.modified  DESC
SELECT  Listing.*,  PrimaryPhoto.* 
FROM listings AS Listing LEFT JOIN
     file_storage AS PrimaryPhoto  
     ON PrimaryPhoto.foreign_key  =  Listing.ID  AND 
        PrimaryPhoto.model  = 'PrimaryListingPhoto'
WHERE Listing.rent >= 0 AND  Listing.rent  <= 5000 AND
      Listing.beds  >= 1 AND
      Listing.is_active  = '1' 
ORDER BY Listing.modified  DESC