用臨時表改善巢狀SQL語句的執行速度

2021-08-22 11:19:23 字數 1298 閱讀 1647

用臨時表改善巢狀sql語句的執行速度

左直拳這兩天檢查一條巢狀sql語句,發覺非常耗時。形如:

select

keyid,

count

(1)as num

from

table1

where

1=1and

createdate>=

'2007-09-21'

andkeyid in(

select keyid from table2 where id=1611)

group

by keyid

究其原因,大約該sql語句執行的步驟是從table1中每拿出一條記錄,都要執行

in(select

keyid from table2 where id=1611) 一番

靠,資料庫也太弱智了吧。學編譯方法時就知道,編譯器會自動優化**,將一些計算從迴圈中提取出來,資料庫怎麼就不能先查詢出

(select

keyid from table2 where id=1611)

的結果,然後再代入整條sql語句中執行呢?

先是這樣修改:

select

a.keyid,

count

(1)as num

from

table1 a

,(select keyid from table2 where id=1611) as b

where

1=1and

a.createdate>=

'2007-09-21'

anda.keyid=b.keyid

group

by a.keyid

結果發現沒什麼改進,有時甚至效果更壞。

把心一橫,祭出臨時表來:

select

keyid into t# from table2 where id=1611;

select

a.keyid,

count

(1)as num

from

table1 a

,t# as b

where

1=1and

a.createdate>=

'2007-09-21'

anda.keyid=b.keyid

group

by a.keyid;

drop table #t;

結果速度改善非常明顯。不必擔心併發操作時臨時表會有衝突,說這個會話建立了乙個t#,那個會話也建立了乙個t#。臨時表就好象區域性變數,只在某個會話裡有意義。

用臨時表改善巢狀SQL語句的執行速度

檢查一條巢狀 sql語句,發覺非常耗時。形如 select keyid,count 1 as num from table1 where 1 1 andcreatedate 2007 09 21 andkeyid in select keyid from table2 where id 1611 g...

用臨時表改善巢狀SQL語句的執行速度

用臨時表改善巢狀sql語句的執行速度 左直拳這兩天檢查一條巢狀sql語句,發覺非常耗時。形如 select keyid,count 1 as num from table1 where 1 1and createdate 2007 09 21 andkeyid in select keyid fro...

SQL語句建立臨時表

1.insert into select語句 語句形式為 insert into table2 field1,field2,select value1,value2,from table1 要求目標表table2必須存在,由於目標表table2已經存在,所以我們除了插入源表table1的字段外,還可...