作者FireLake (XXX)
看板Database
标题Re: [SQL ] sql query的效能问题?
时间Wed Oct 10 13:06:07 2012
※ 引述《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)
1F:推 Arim:所以没有index的情况下,两个的时间复杂度都是O(N)吗? 10/10 15:52
2F:→ FireLake:没错 10/11 09:14