Re: [SQL ] MySQL Join 用法疑問
※ 引述《JoeHorn (獅子男)》之銘言:
: ※ 引述《gamewolf (Escape)》之銘言:
: : Mysql 4.1.22
: : 今天小弟遇到怪怪的問題,想請教一下
: : 我用 php 執行一個 sql 語法
: : Select a.*,b.TestItem,d.sale From ProjSchedule a,ProjTestItem b ,
: : correspondent d Where a.TestDate = '2007-11-20' and a.RelItemNo = b.ID
: : and d.co_number = SUBSTRING( a.CaseID, 1, 4 )
: : 會讓 Mysql cpu 使用率高達 70 ~ 80%,差不多三十秒後才回應完成
: : 回傳的資料筆數是 40
: : 但使用 phpmyadmin 測試,只要不到 1s 就完成
: : 後來發現是 phpmyadmin 加了 Limit,然後小弟跟著在自己的程式裡加 Limit
: : 疑,真快...Orz
: : Limit 不是限制回傳的筆數嗎?這會關係到查詢效能?
: 會!
: 很簡單的想法,LIMIT 塞滿了我就不繼續找下去了。
: 明顯案例:http://0rz.tw/f13iL
: 另外,這篇文章也有參考價值:http://0rz.tw/7f3kH
那假如有 Order by 時,不是應該等全部做完後排序
然後再取 Limit 筆數?這樣就沒有比較快了吧?
(第二篇好長....慢慢啃)
: : 另外小弟改寫成
: : SELECT a. * , b.TestItem, d.sale FROM ProjSchedule a, ProjTestItem b
: : LEFT JOIN correspondent d ON d.co_number = SUBSTRING( a.CaseID, 1, 4 )
: : WHERE a.TestDate = '2007-11-20' AND a.RelItemNo = b.ID
: : 這樣的話就很快,差不多 1s
: : 可是用 Left join 跟直接 From 起來,不是應該要一樣?
: : 差別只是在於 Left join 會把沒有資料的欄位填 Null 而已不是嗎?
: : 疑問很多,感謝各位
: 我猜...
: Select a.*,b.TestItem,d.sale From ProjSchedule a,ProjTestItem b ,
: correspondent d Where a.TestDate = '2007-11-20'
: and d.co_number = SUBSTRING( a.CaseID, 1, 4 )
: and a.RelItemNo = b.ID
: 會比你上面那個要花三十秒的還要快。
呃,昨天想說 Order by 子句影響不大,就沒有貼上來
實際上我在下 sql 時是有加 Order by a.StartTest , a.TestRoom 的
今天想說拿掉看看,一拿掉,很快、非常快
但使用 Left join 的情況下,拿不拿掉是沒太大差異的
所以還是不太懂為什麼 @@?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.124.24.124
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 4 篇):