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

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

SQL Server中各種寫法的效率問題探討

2024-08-31 00:43:37
字體:
供稿:網(wǎng)友

經(jīng)常使用數(shù)據(jù)庫的人知道,同樣一個(gè)問題可以使用不同的SQL語句來實(shí)現(xiàn)。但,這些不同的寫法可能能達(dá)到同樣的目的,但是執(zhí)行效率肯定會(huì)大相徑庭。下面是本文作者根據(jù)自己經(jīng)驗(yàn)列舉的一些例子,希望對(duì)研究SQL執(zhí)行效率的大蝦們有錯(cuò)啟示,有所收獲。

(1)一次插入多條數(shù)據(jù)時(shí):
CREATE TABLE tb(ID int, 名稱 NVARCHAR(30), 備注 NVARCHAR(1000))
INSERT tbSELECT 1,'DDD',1
UNIONALLSELECT 1,'5100','D'
UNIONALLSELECT 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')
_________________________________
上面兩種方法,哪種方法效率高?

(2)賦值時(shí):
SELECT @a=N'aa'
SET @a=N'aa'
_________________________________
上面兩種方法,哪種方法效率高?

  (3)取前幾條數(shù)據(jù)時(shí)
set ROWCOUNT 2 select * from tb order by fd
select Top 2 * from tb order by fd
_________________________________
上面兩種方法,哪種方法效率高?

  (4)條件判斷時(shí)
where 0<(select count(*) from tb where ……)
where exists(select * from tb where ……)
_________________________________
上面兩種方法,哪種方法效率高?

  (5)NULLIF的使用----->同理它的反函數(shù)ISNULL的使用
update tb set fd=case when fd=1 then null else fd end
update tb set fd=nullif(fd,1)
_________________________________
上面兩種方法,哪種方法效率高?

  (6)從字符串中取子字符串時(shí)
substring('abcdefg',1,3)
left('abcderg',3)_
________________________________
上面兩種方法,哪種方法效率高?

  (7)EXCEPT和Not in的區(qū)別?

  (8)INTERSECT和UNION的區(qū)別?

下面是鄒老大的回答:

(1)一次插入多條數(shù)據(jù)時(shí):

第1種好一些, 但也得有個(gè), 因?yàn)榈?種的union all是做為一個(gè)語句整體, 查詢優(yōu)化器會(huì)嘗試做優(yōu)化, 同時(shí), 也要先算出這個(gè)結(jié)果再插入的.

2. 如果是單個(gè)賦值, 沒有什么好比較的話.

不過, 如果是為多個(gè)變量賦值, 我測(cè)試過, SELECT 一次性賦值, 比用SET 逐個(gè)賦值效率好.

3. SET ROWCOUNT和TOP 是一樣的, 包括執(zhí)行的計(jì)劃等都是一樣的

4. 這個(gè)一般是exists快, 當(dāng)然, 具體還要看你后面的子查詢的條件, 是否會(huì)引用外層查詢中的對(duì)象的列.
exists檢查到有值就返回, 而且不返回結(jié)果集, count需要統(tǒng)計(jì)出所有滿足條件的, 再返回一個(gè)結(jié)果集, 所以一般情況下exists快.

5. 應(yīng)該是一樣的

6. 基本上是一樣的

7. except會(huì)去重復(fù), not in 不會(huì)(除非你在select中顯式指定)

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

8. intersect是兩個(gè)查詢都有的非重復(fù)值(交集), union是兩個(gè)查詢結(jié)果的所有不重復(fù)值(并集)

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 泸西县| 桐城市| 平武县| 宁武县| 高碑店市| 札达县| 福泉市| 驻马店市| 曲周县| 洛隆县| 芜湖市| 昂仁县| 杨浦区| 绍兴县| 石泉县| 辽阳县| 滕州市| 随州市| 忻城县| 镇坪县| 富源县| 开平市| 云阳县| 湘阴县| 杭州市| 景宁| 宜昌市| 体育| 绵竹市| 大化| 鲜城| 运城市| 翁源县| 玉山县| 子洲县| 壤塘县| 南江县| 新宁县| 广灵县| 合阳县| 巴楚县|