作者JYHuang (夏天到了,冷不起來了說)
看板Database
標題[SQL ] JOIN TABLE時WHERE的用法會影響效能嗎?
時間Wed Jun 22 22:24:35 2016
今天在寫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
應該是不一樣結果的吧?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.255.152.9
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Database/M.1466605479.A.C80.html
1F:→ iFEELing: 關鍵字:執行計畫 06/23 03:28
2F:→ JYHuang: 感謝..我看一下MySQL的工具有沒有這功能 06/23 09:05
3F:→ JYHuang: 今天再看一下,主單33萬筆、子單10萬筆.... 06/23 09:12
4F:推 streetbad: 1.JOIN能用inner就盡量不用left...JOIN內盡量避免使用 06/23 10:27
5F:→ streetbad: 子查詢 尤其又是資料筆數多的時候 另外JOIN內如真無可 06/23 10:28
6F:→ streetbad: 可避免要用到子查詢 建議增加欄位的限縮 有用的再挑出 06/23 10:29
7F:→ streetbad: 來 避免使用* 06/23 10:29
8F:→ streetbad: 2.WHERE條件內 string的查詢 避免使用like+or 可以改用 06/23 10:30
9F:→ streetbad: union試試看 06/23 10:30
10F:→ streetbad: 3.開執行計畫看看是否有使用正確索引 耗用資源主要是在 06/23 10:30
11F:→ streetbad: 哪段語法上面 建立相對應的索引 A.key的部分也可以建 06/23 10:31
12F:→ streetbad: 立全文檢索試試看 這樣條件內可以嘗試使用全文檢索 06/23 10:31
13F:→ streetbad: 另外回答最後面的問題 兩個條件查詢的結果不會一樣 06/23 10:33
14F:→ streetbad: 上述為個人實務上處理經驗..有誤請再提出指教Orz 06/23 10:39
15F:推 rockchangnew: 都是Like '%%' 根本不會用索引 06/23 13:50