簡體   English   中英

優化查詢(LEFT JOIN)

[英]optimizing query (LEFT JOIN)

我的目標是同時顯示公司的搜索結果:帶類別和不帶類別(尚未添加)。 我的公司表具有大約12000條記錄。 具有類別的公司大約只有200個。

有兩個搜索輸入:$ name->公司或類別的名稱。 $ id_country->國家的ID

我要顯示: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秒鍾,我想對其進行優化。 你可以幫幫我嗎? 如有任何建議,我將不勝感激。

在查詢的FROM部分之外,您似乎並沒有實際使用通過這兩行連接的表:

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

我猜想,如果它們通過諸如聯接抑制行之類的更巧妙的方法不相關,則可以將它們從查詢中排除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM