Php 如何优化我的SQL查询?

Php 如何优化我的SQL查询?,php,mysql,query-optimization,Php,Mysql,Query Optimization,我对一个非常慢的MYSQL查询有一个问题。我正在用PHP构建一个AJAX菜单,性能确实是个问题。查询大约需要0.5秒才能完成,我不知道如何优化它 SQL查询: SELECT M.nom_mat, M.id_mat, M.rang, SC.nom_sous_cat, SC.id_sous_cat, C.nom_cat,M.id_cat FROM besson_mat M LEFT OUTER JOIN besson_lien_mat LM ON M.id_mat = LM.id_mat LEFT

我对一个非常慢的MYSQL查询有一个问题。我正在用PHP构建一个AJAX菜单,性能确实是个问题。查询大约需要0.5秒才能完成,我不知道如何优化它

SQL查询:

SELECT M.nom_mat, M.id_mat, M.rang, SC.nom_sous_cat, SC.id_sous_cat, C.nom_cat,M.id_cat
FROM besson_mat M
LEFT OUTER JOIN besson_lien_mat LM ON M.id_mat = LM.id_mat
LEFT OUTER JOIN besson_sous_cat SC ON SC.id_sous_cat = LM.id_sous_cat
LEFT OUTER JOIN besson_cat C ON C.id_cat = SC.id_cat
WHERE M.en_ligne = '1'
AND M.lg = 'fr'
AND (
M.id_cat = '28'
OR M.id_cat = '29'
)
OR (
SC.id_sous_cat = '37'
OR SC.id_sous_cat = '42'
OR SC.id_sous_cat = '43'
OR SC.id_sous_cat = '44'
)
ORDER BY C.id_cat ASC , SC.id_sous_cat ASC , M.rang ASC
谢谢你的帮助,如果你需要更多细节,我会更新我的问题

最终编辑


WHERE子句中的附加括号是问题的原因。现在我的查询大约需要0.0718秒才能完成,非常感谢

> P>典型地,您可以考虑在联接中使用的任何列上添加索引,其中子句和ORDERBY子句。

如果这没有帮助,请使用您的数据库开发界面对查询执行解释计划,以查看它在哪里陷入困境


你可以试着把解释计划的结果放在这里。

不要只做连接过滤,你可以使用exists或not exists子句,这样更好

也许可以删除您的ORDERBY子句并在应用程序中进行排序

您还可以在id列lg和en_lign中添加一些索引


因此,您可以使用(id1,id2,id3,…)语法中的
列,而不是使用那么多的OR

第二,Mysql有一个
EXPLAIN
命令,它给你一些提示,它做什么,以及你如何优化你的查询(使用索引,重新设计连接等)
另请参见

,您可能有语法问题。你确定不想在where子句的最后两部分加上一组括号吗?谢谢,这些括号是我的问题的原因。现在我的查询速度非常快。
EXPLAIN
命令+1。我认为在内部,
IN()
将被优化到大致相同的水平(换句话说,我不认为会有多大的收益)。但是
EXPLAIN
应该说明它为什么慢…哦,从可读性的角度来看,
IN()
更好。而且我倾向于在长度上更倾向于可读性(和性能,除非知道这是一个瓶颈)…感谢所有的提示,我试着解释我的查询,但我不理解结果。你能提供一个如何阅读的链接吗?你提供的链接足够了,我的错。