問:
(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 也可以這樣 ...