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

首頁 > 開發 > 綜合 > 正文

SQL各種寫法的效率問題

2024-07-21 02:11:44
字體:
來源:轉載
供稿:網友

經常可以遇到這種情況:用不同的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'

也可以這樣:
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)賦值時:
select @a=n'aa'
set @a=n'aa'
_________________________________
上面兩種方法,哪種方法效率高?

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

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

(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的區別?

(8)intersect和union的區別?
下面是鄒老大的回答:


(1)一次插入多條數據時:

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


2. 如果是單個賦值, 沒有什么好比較的話.
不過, 如果是為多個變量賦值, 我測試過, select 一次性賦值, 比用set 逐個賦值效率好.


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

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

5. 應該是一樣的


6. 基本上是一樣的

7. except會去重復, not in 不會(除非你在select中顯式指定)
   except用于比較的列是所有列, 除非寫子查詢限制列, not in 沒有這種情況
8. intersect是兩個查詢都有的非重復值(交集), union是兩個查詢結果的所有不重復值(并集)
 


 

,歡迎訪問網頁設計愛好者web開發。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阳泉市| 通州市| 万安县| 齐齐哈尔市| 胶州市| 高淳县| 桂阳县| 东乡县| 正镶白旗| 泸水县| 莱芜市| 祁东县| 达州市| 威宁| 香河县| 华容县| 广河县| 大洼县| 黑河市| 邯郸县| 临海市| 东台市| 广昌县| 东源县| 庆阳市| 巴里| 横峰县| 祁门县| 辽中县| 宁阳县| 都昌县| 泰来县| 灵石县| 郑州市| 崇信县| 永登县| 清原| 景洪市| 云浮市| 岳阳县| 井陉县|