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

看板Database (資料庫)作者 (夏天到了,冷不起來了說)時間8年前 (2016/06/22 22:24), 編輯推噓2(2013)
留言15則, 4人參與, 最新討論串1/5 (看更多)
今天在寫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

06/23 03:28, , 1F
關鍵字:執行計畫
06/23 03:28, 1F

06/23 09:05, , 2F
感謝..我看一下MySQL的工具有沒有這功能
06/23 09:05, 2F

06/23 09:12, , 3F
今天再看一下,主單33萬筆、子單10萬筆....
06/23 09:12, 3F

06/23 10:27, , 4F
1.JOIN能用inner就盡量不用left...JOIN內盡量避免使用
06/23 10:27, 4F

06/23 10:28, , 5F
子查詢 尤其又是資料筆數多的時候 另外JOIN內如真無可
06/23 10:28, 5F

06/23 10:29, , 6F
可避免要用到子查詢 建議增加欄位的限縮 有用的再挑出
06/23 10:29, 6F

06/23 10:29, , 7F
來 避免使用*
06/23 10:29, 7F

06/23 10:30, , 8F
2.WHERE條件內 string的查詢 避免使用like+or 可以改用
06/23 10:30, 8F

06/23 10:30, , 9F
union試試看
06/23 10:30, 9F

06/23 10:30, , 10F
3.開執行計畫看看是否有使用正確索引 耗用資源主要是在
06/23 10:30, 10F

06/23 10:31, , 11F
哪段語法上面 建立相對應的索引 A.key的部分也可以建
06/23 10:31, 11F

06/23 10:31, , 12F
立全文檢索試試看 這樣條件內可以嘗試使用全文檢索
06/23 10:31, 12F

06/23 10:33, , 13F
另外回答最後面的問題 兩個條件查詢的結果不會一樣
06/23 10:33, 13F

06/23 10:39, , 14F
上述為個人實務上處理經驗..有誤請再提出指教Orz
06/23 10:39, 14F

06/23 13:50, , 15F
都是Like '%%' 根本不會用索引
06/23 13:50, 15F
文章代碼(AID): #1NQf-do0 (Database)
文章代碼(AID): #1NQf-do0 (Database)