国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

教你快速掌握SQL語句各種寫法的效率問題

2024-07-21 02:42:47
字體:
來源:轉載
供稿:網友
問題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:

(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是兩個查詢結果的所有不重復值(并集)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 股票| 乐昌市| 巴青县| 青铜峡市| 东海县| 肃宁县| 宣化县| 定陶县| 万山特区| 德清县| 灵川县| 镇沅| 平乡县| 远安县| 临海市| 尼勒克县| 新兴县| 嘉祥县| 乌兰浩特市| 无锡市| 缙云县| 蒲江县| 连城县| 微博| 云梦县| 安西县| 河西区| 金溪县| 石城县| 龙山县| 定安县| 普格县| 玛纳斯县| 印江| 革吉县| 卓资县| 丽江市| 行唐县| 东丰县| 乐山市| 米脂县|