优化查询(LEFT JOIN)

时间:2013-11-16 12:34:49

标签: mysql sql performance left-join

我的目标是显示公司的搜索结果:包含类别和不包含(尚未添加)。我的公司表有或多或少12000条记录。有类别的公司只有或多或少200。

有两个搜索输入: $ name - >公司名称或类别。 $ id_country - >国家的身份

我想要显示: 1)所有数据库中有多少结果。 (这就是我使用的原因:SQL_CALC_FOUND_ROWS) 2)我使用LIMIT每页显示10个结果(带分页)。

我的查询:

SELECT SQL_CALC_FOUND_ROWS 
c.*, 
lc.name as langName,
lc.shortDesc,
lc.longDesc 

FROM companies c 
JOIN lang_companies lc USING(id_company) 
LEFT JOIN categories_companies cc USING(id_company)
LEFT JOIN lang_categories lang_cat USING (id_category) 

WHERE 
lc.id_lang = '2' AND c.status = 1 AND c.active = 1 AND  c.id_country = ".$id_country." AND 
(lc.name = LCASE('".$name."') OR (lang_cat.name = LCASE('".$name."') AND lang_cat.id_lang = '2')
OR c.city = '".$name."')
GROUP BY c.id_company 
ORDER BY c.id_hierarchi asc 
LIMIT 0, 10

此查询执行或多或少6秒,我想优化它。你可以帮帮我吗? 我会很感激任何建议。

1 个答案:

答案 0 :(得分:0)

在查询的FROM部分中,您似乎没有实际使用与这两行连接的表:

LEFT JOIN categories_companies cc USING(id_company)
LEFT JOIN categories cat USING (id_category) 

我认为你可以简单地将它们从查询中排除,如果它们不像通过连接抑制行这样的sublte相关。