[SQL ] 關於 where 前後順序是否會影響效能

看板Database作者 (蔥頭)時間11年前 (2014/05/05 23:26), 11年前編輯推噓5(506)
留言11則, 5人參與, 最新討論串1/1
資料庫名稱:MySQL 資料庫版本:5.1.33 內容/問題描述: 我想請問一下,假設account是帳號, is_ban(1:代表被鎖帳號) (1) select * from where account='123' and is_ban=0; (2) select * from where is_ban=0 and account='123'; 以上述兩句sql,第1句sql是否優於第二句還是一樣?? 以第1句sql來說資料庫運作方式是否是先找出account='123'的rows再找該rows is_ban=0, 還是說先篩選account='123' 再篩選is_ban=0,兩個篩選出來的rows再做and?? 較常理來說先找account='123'再找is_ban=0會優於先找is_ban再找account='123'嗎? 最後題外問個問題 where account='123' and is_ban=0; database換按照sql由左而右的語法進行篩選是嘛?? 也就是先篩選account='123' 再篩選is_ban=0 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.249.120.106 ※ 文章網址: http://www.ptt.cc/bbs/Database/M.1399303588.A.5EA.html ※ 編輯: tas72732002 (111.249.120.106), 05/05/2014 23:27:43

05/06 01:30, , 1F
記憶中是會受到影響,所以要把嚴苛的條件放前面
05/06 01:30, 1F
tas72732002:轉錄至看板 PHP 05/06 13:35

05/06 14:24, , 2F
我看了 一些網路上的實驗,有人說是沒有差別
05/06 14:24, 2F

05/06 14:24, , 3F
我補充一下~ 上述的例子是假設都沒有建立INDEX的情況
05/06 14:24, 3F

05/06 14:25, , 4F
blog.sina.com.cn/s/blog_4586764e0100mdif.html
05/06 14:25, 4F

05/06 14:25, , 5F
可以參考上述網址
05/06 14:25, 5F

05/06 14:27, , 6F
我只知ORACLE有分RBO、CBO,在RBO下會有影響,其他系統不知..
05/06 14:27, 6F

05/06 14:47, , 7F
所以把濾掉較多rows的條件放在右邊嗎?是由右往左解析?
05/06 14:47, 7F

05/06 22:34, , 8F
沒有影響,Index的順序有影響
05/06 22:34, 8F

05/07 00:51, , 9F
jojo大是對的~ 抱歉記錯了!
05/07 00:51, 9F

05/07 01:01, , 10F
05/07 01:01, 10F

05/10 20:24, , 11F
Mssql是沒影響,index的欄位排序才是重點
05/10 20:24, 11F
文章代碼(AID): #1JPwsaNg (Database)