問:
(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'
也可以這樣
:
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 tb select 1,ddd 1 union all select 1,5100 d union all select 1,5200 e 也可以這樣 ...
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...