[SQL ] JOIN TABLE時WHERE的用法會影響效能嗎?

作者: JYHuang (夏天到了,冷不起來了說)   2016-06-22 22:24:35
今天在寫MySQL時,發現條件比較寬時會出現撈資料撈到SERVER沒回應
便有點好奇WHERE先後順序和配對會不會影響效能?
Table A和B大概都是有幾千比的資料
兩著的關聯是由一個可能為空白(不是null)的值
在下了指令
SELECT * FROM A
LEFT JOIN (SELECT * FROM B WHERE A.name like '%k%' ORDER BY x) B
ON A.key=B.key
WHERE (A.key like '%k%' OR B.key like '%k%')
然後就執行到沒回應了,
猜想用括號括起來是不是會先JOIN 再做條件
要是如果改下
WHERE A.key like '%k%' OR B.key like '%k%'
會不會先把A做飾選後再去JOIN飾選後的B?
另外
WHERE (A.key like '%k%' OR B.key like '%k%') AND (A.id = n OR B.id)

WHERE A.key like '%k%' OR B.key like '%k%' AND A.id = n OR B.id
應該是不一樣結果的吧?
作者: iFEELing (ing)   2016-06-23 03:28:00
關鍵字:執行計畫
作者: JYHuang (夏天到了,冷不起來了說)   2016-06-23 09:05:00
感謝..我看一下MySQL的工具有沒有這功能今天再看一下,主單33萬筆、子單10萬筆....
作者: streetbad (翊)   2016-06-23 10:27:00
1.JOIN能用inner就盡量不用left...JOIN內盡量避免使用子查詢 尤其又是資料筆數多的時候 另外JOIN內如真無可可避免要用到子查詢 建議增加欄位的限縮 有用的再挑出來 避免使用*2.WHERE條件內 string的查詢 避免使用like+or 可以改用union試試看3.開執行計畫看看是否有使用正確索引 耗用資源主要是在哪段語法上面 建立相對應的索引 A.key的部分也可以建立全文檢索試試看 這樣條件內可以嘗試使用全文檢索另外回答最後面的問題 兩個條件查詢的結果不會一樣上述為個人實務上處理經驗..有誤請再提出指教Orz
作者: rockchangnew (rock)   2016-06-23 13:50:00
都是Like '%%' 根本不會用索引

Links booklink

Contact Us: admin [ a t ] ucptt.com