Re: [SQL ] sql query的效能問題?

看板Database作者 (XXX)時間13年前 (2012/10/10 13:06), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《Arim (Arim5566)》之銘言: : 各位版友好 : 對於存取資料庫的時間複雜度有一點困惑 : 假如我有一個table,有n個tuple : schema有m個屬性,A1,A2...Am,(總共有m個column) : case 1(只比對一個column): : select A1 : from emp : where A1>40 : case 2(比對m個column): : select A1,A2...Am : from emp : where A1>40,A2 == "xxxx"...,Am == "xxx" : 在作query的時候,是不是會先抓每一個tuple出來,在逐一比對每一個屬性呢? : 如果是這樣的話那case2就會比case1還要慢?(如果m很大的話) : 看網路上面很多人寫時間複雜度只有O(n) @@ : 謝謝各位版友的指教 這種問題通常都要先比較 query plan,在沒有index的情況下,你這兩個case 都是要做 full table scan,所以基本上是一樣快。 如果有一個index是在 column A1上,你的case 1是做 index range scan, case 2 是先做index range scan,再做 table access by row id,所以case 1 會比較快。但要注意的一點是,造成兩個 case 的 query plan 不一樣的原因 不一定是 where,有時是 select。例如,當把你的 case 1 改成 "select A1, A2...Am from emp where A1>40" 在這情況下,case 1的query plan就變成和case 2一樣,是先做index range scan, 再做 table access by row id。 總而言之,比較 query plan 就可以大略知道那個 query 比較快。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 69.181.252.242 ※ 編輯: FireLake 來自: 69.181.252.242 (10/10 13:10)

10/10 15:52, , 1F
所以沒有index的情況下,兩個的時間複雜度都是O(N)嗎?
10/10 15:52, 1F

10/11 09:14, , 2F
沒錯
10/11 09:14, 2F
文章代碼(AID): #1GTG92xe (Database)
文章代碼(AID): #1GTG92xe (Database)