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

作者: JYHuang (夏天到了,冷不起來了說)   2016-06-23 20:57:49
推 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
感謝streetbad版友的提醒
目前的寫法大致是如此,
A資料庫有33萬比資料,B大約有10萬比。
兩個資料都有f1,f2這些欄位沒有建索引,經由key欄位關聯。
要搜尋A,B中f1或f2符合val值的資料
而且只顯示B最新的一筆
目前的寫法是如此,大概兩秒左右就能跑出資料了
不過上頭似乎還是覺得有點慢 XD
我用分析工具,有三個時間會比較慢
send data 0.29 sec
send data 0.29 sec 猜測是要UNION兩個資料的sql
send data 0.8 sec 然後這把匯集的資料再SELECT這一段
這種情形應該常見不是很罕見,
猜想應該還會有更好的方法,只是一時還想不太出來啊。
SELECT W.* FROM (
SELECT W.*,O.* FROM W
LEFT JOIN (
SELECT Key,f1,f2,f3 FROM (
SELECT Key,f1,f2,f3 FROM O
WHERE O.Key <> '' AND (O.f1='val' OR O.f2='val')
) as O
Order by O.f3 desc limit 1
) as O
ON W.key = O.key
WHERE W.key <> '' AND (W.f1='val' OR W.f2='val')
UNION
SELECT W.*,O.* FROM W
LEFT JOIN (
SELECT Key,f1,f2,f3 FROM (
SELECT key,f1,f2,f3 FROM O
WHERE O.key <> '' AND (O.f1='val' OR O.f2='val')
) as O
Order by O.f3 desc limit 1
) as O
ON W.key = O.key
WHERE W.key <> '' AND (O.f1='val' OR O.f2='val')
) as W
作者: streetbad (翊)   2016-06-24 00:10:00
如不介意是可釋出一點欄位內容資訊及條件還有欲產出的結果比較方便提供協助另外多層SELECT的動作還有LEFT JOIN子查詢的部份 可以朝先塞到temp table的方向 字串的條件看起來也是可再調整 目前應該主要是這三塊在拖速度
作者: streetbad (翊)   2015-06-23 10:27:00
1.JOIN能用inner就盡量不用left...JOIN內盡量避免使用子查詢 尤其又是資料筆數多的時候 另外JOIN內如真無可可避免要用到子查詢 建議增加欄位的限縮 有用的再挑出來 避免使用*2.WHERE條件內 string的查詢 避免使用like+or 可以改用union試試看3.開執行計畫看看是否有使用正確索引 耗用資源主要是在哪段語法上面 建立相對應的索引 A.key的部分也可以建立全文檢索試試看 這樣條件內可以嘗試使用全文檢索另外回答最後面的問題 兩個條件查詢的結果不會一樣上述為個人實務上處理經驗..有誤請再提出指教Orz
作者: rockchangnew (rock)   2015-06-23 13:50:00
都是Like '%%' 根本不會用索引

Links booklink

Contact Us: admin [ a t ] ucptt.com