2011-02-15 70 views
1

的我有這個疑問:如何優化MySQL查詢包含表和左連接SQL視圖

SELECT a.id, b.discount FROM (a LEFT JOIN b ON b.id_a = a.id); 

此查詢說明命令是這樣的:

id select_type table type possible_keys key  key_len ref rows Extra 
1 SIMPLE  a  index NULL   PRIMARY 4  NULL 1489 Using index 
1 SIMPLE  b  ALL NULL   NULL  NULL  NULL 819 

A是表1489行而B是一個SQL視圖。現在我明白了,MySQL必須執行1489 * 819操作,這種操作方式也不太適合。如果B是表,我會爲列id_a創建一個索引,但我不知道如何處理SQL視圖。

有人可以幫忙嗎?

+0

視圖的真的只是一個存儲查詢。相同的優化技術適用於視圖,就像您直接在主查詢中使用視圖的基礎查詢一樣 – 2011-02-15 14:17:01

回答

2

我會查看視圖,然後嘗試轉到原始表格,以限定您關心的元素是否存在或不存在。並確保「b」視圖的根表具有該鍵上的索引。

+0

完美地工作!非常感謝,我想知道我怎麼會錯過它,現在看起來很合乎邏輯。我剛剛在視圖B中使用的表的鍵上添加了索引。 – Frodik 2011-02-15 14:55:44

0

您可以嘗試使用索引創建臨時表,而不是使用視圖(未指定索引)。我們爲此做了一些冗長的報告查詢,並因此得到了令人印象深刻的速度提升(當然YMMV)。

0

切換表格和視圖可能會有幫助。

例如:

SELECT a.id, b.discount FROM (b RIGHT JOIN a ON b.id_a = a.id);