2012-08-31 149 views
3

我有2個表:MySQL的左連接優化

  • formfill有列idmessagevaluenamefield
  • fields具有列namefield,typefield,optionsfield

我沒有任何主鍵。關係在名稱欄之間。

我的查詢是:

select e.namefield,e.typefield,e.optionsfield,b.value,b.id 
from fields as e 
left join formfill as b on e.namefield = b.namefield and b.id=1011 

這個查詢就可以了。但它運行非常緩慢(約10秒)。我怎樣才能讓它更快?

+0

你已經添加了必要的索引到表? – defuz

+0

您需要添加索引。你可以發佈'EXPLAIN SELECT e.namefield ...'的結果嗎? – Kermit

+1

這個查詢在做什麼?在第二張桌子上看到一個左外連接有限制是有點不尋常的。通常,當選擇一個id時,你需要這個id。但是這個查詢更一般。你真的認爲是一個正確的外部連接嗎? –

回答

1

你或許應該用

http://dev.mysql.com/doc/refman/5.0/en/explain.html

但發表您的查詢計劃查詢執行的低速migh意味着

  • 你沒有索引,引擎必須做全掃描,所以最好在有''等操作的字段上添加索引。索引的類型可以是「散列」如果您使用=或<>和B樹用於操作等<或>

  • 在右表中的行的數目大於一在左邊的表中的10幅值和更多,所以索引將沒有多大幫助,你將需要考慮分區數據