作者gamewolf (Escape)
看板Database
标题Re: [SQL ] MySQL Join 用法疑问
时间Wed Nov 21 09:19:38 2007
※ 引述《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