我目前遇到SQL查詢問題。我有一個包含colour_code字段的產品表。我無法改變產品表,因爲它是從外部來源獲取的。Mysql連接查詢問題
在網站上,用戶可以通過colour_code搜索產品,並返回所有可用此顏色的產品。
手頭的任務是讓不同的搜索字詞返回具有不同顏色代碼的特定產品。爲此,我添加了一個名爲colour_code_alias的新表,它只有一個colour_code字段,該字段對應於產品表中的colour_code字段以及一個將返回此結果的別名字段。見下面的表格示例。
**Product_tb**
id, colour_code
1, "ABC"
**colour_code_alias_td**
colour_code,alias
"ABC","XYZ"
所以,如果XYZ用戶搜索,就應該如果搜索「ABC」退回的產品與1的ID,他們也應該與1
的ID返回的產品我的問題是查詢執行時間太長,因爲它沒有使用索引。我的一個簡化查詢低於:
Select * from product
left join colour_code_alias cca on cca.colour_code = product.colour_code
where (product.colour_code = 'XYZ' or cca.alias = "XYZ")
當我使用的解釋說明其不使用此查詢的關鍵。 當我在where子句中刪除'或cca.alias =「XYZ」'時,正在使用產品表中的colour_code索引。
我正在尋找幫助,以提高這樣的查詢的性能,我應該如何索引這種類型的查詢,甚至應該重寫它?
任何幫助表示讚賞。
謝謝, 馬丁。
就像我已經做了什麼..我已經刪除了左連接,並添加了一個選擇查詢到where子句。該查詢如下所示:
Select * from product
where (product.colour_code = 'XYZ' or product.colour_code = (select colour_code from colour_code_alias where alias = 'XYZ'));
是cca.alias索引? – mconlin 2013-04-05 12:44:00
是的...我測試過使用3個索引。colour_code,別名和複合colour_code_alias索引。 – Martin 2013-04-05 12:46:06