SQL各種寫法的效率問題

2021-08-22 04:16:11 字數 3418 閱讀 2133

問:

(1)一次插入多條資料時:

create table tb(id int, 名稱nvarchar(30), 備註nvarchar(1000))

insert tb select 1,'ddd',1

union

all select 1,'5100','d'

union

all select 1,'5200','e'

也可以這樣:

create table tb1(id int, 名稱nvarchar(30), 備註nvarchar(1000))

insert tb1 (id,名稱,備註)values(1,'ddd',1)

insert tb1 (id,名稱,備註)values(1,'5100','d')

insert tb1 (id,名稱,備註)values(1,'5200','e')

_________________________________

上面兩種方法,哪種方法效率高?

答:

第1種好一些, 但也得有個量的控制, 因為第1種的union all是作為乙個語句整體, 查詢優化器會嘗試做優化, 同時, 也要先算出這個結果再插入的.

問:

(2)賦值時:

select @a=n'aa'

set @a=n'aa'

_________________________________

上面兩種方法,哪種方法效率高?

答:

如果是單個賦值, 沒有什麼好比較的話.

不過, 如果是為多個變數賦值, 經測試,select 一次性賦值, 比用set 逐個賦值效率好..

問:

(3)取前幾條資料時

set rowcount 2 select * from tb order by fd

select top 2 * from tb order by fd

_________________________________

上面兩種方法,哪種方法效率高?

答:

set rowcount和top 是一樣的, 包括執行的計畫等都是一樣的

問:

(4)條件判斷時

where 0<(select count(*) from tb where ……)

where exists(select * from tb where ……)

_________________________________

上面兩種方法,哪種方法效率高?

答:

這個一般是exists快, 當然, 具體還要看你後面的子查詢的條件, 是否會引用外層查詢中的物件的列.

exists檢查到有值就返回, 而且不返回結果集, count需要統計出所有滿足條件的, 再返回乙個結果集, 所以一般情況下exists快.

問:

(5)nullif的使用----->同理它的反函式isnull的使用

update tb set fd=case when fd=1 then null else fd end

update tb set fd=nullif(fd,1)

_________________________________

上面兩種方法,哪種方法效率高?

答:

應該是一樣的

問:

6)從字串中取子字串時

substring('abcdefg',1,3)

left('abcderg',3)_

________________________________

上面兩種方法,哪種方法效率高?

答:

基本上是一樣的

問:

(7)except和not in的區別?

答:

except會去重複, not in 不會(除非你在select中顯式指定)

except用於比較的列是所有列, 除非寫子查詢限制列, not in 沒有這種情況

問:

(8)intersect和union的區別?

答:

intersect是兩個查詢都有的非重複值(交集), union是兩個查詢結果的所有不重複值(並集)

csdn上對應的帖子

SQL各種寫法的效率問題

問 1 一次插入多條資料時 create table tb id int,名稱nvarchar 30 備註nvarchar 1000 insert tbselect 1,ddd 1 union allselect 1,5100 d union allselect 1,5200 e 也可以這樣 cre...

SQL各種寫法的效率問題

問 1 一次插入多條資料時 create table tb id int,名稱nvarchar 30 備註nvarchar 1000 insert tbselect 1,ddd 1 union allselect 1,5100 d union allselect 1,5200 e 也可以這樣 cre...

SQL各種寫法的效率問題

問 1 一次插入多條資料時 create table tb id int,名稱nvarchar 30 備註nvarchar 1000 insert tb select 1,ddd 1 union all select 1,5100 d union all select 1,5200 e 也可以這樣 ...