看板 Database 關於我們 聯絡資訊
今天在寫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://www.ptt.cc/bbs/Database/M.1466605479.A.C80.html
iFEELing: 關鍵字:執行計畫 06/23 03:28
JYHuang: 感謝..我看一下MySQL的工具有沒有這功能 06/23 09:05
JYHuang: 今天再看一下,主單33萬筆、子單10萬筆.... 06/23 09:12
streetbad: 1.JOIN能用inner就盡量不用left...JOIN內盡量避免使用 06/23 10:27
streetbad: 子查詢 尤其又是資料筆數多的時候 另外JOIN內如真無可 06/23 10:28
streetbad: 可避免要用到子查詢 建議增加欄位的限縮 有用的再挑出 06/23 10:29
streetbad: 來 避免使用* 06/23 10:29
streetbad: 2.WHERE條件內 string的查詢 避免使用like+or 可以改用 06/23 10:30
streetbad: union試試看 06/23 10:30
streetbad: 3.開執行計畫看看是否有使用正確索引 耗用資源主要是在 06/23 10:30
streetbad: 哪段語法上面 建立相對應的索引 A.key的部分也可以建 06/23 10:31
streetbad: 立全文檢索試試看 這樣條件內可以嘗試使用全文檢索 06/23 10:31
streetbad: 另外回答最後面的問題 兩個條件查詢的結果不會一樣 06/23 10:33
streetbad: 上述為個人實務上處理經驗..有誤請再提出指教Orz 06/23 10:39
rockchangnew: 都是Like '%%' 根本不會用索引 06/23 13:50