避免在 SQL Server 中盲目地追求一句處理

發表于:2008-10-13來源:作者:點擊數: 標簽:sqlSQLSqlSERVERServer
關鍵字: sql SQL Server的處理中,不少人有追求一句出結果的習慣,但必須注意的是,不恰當的合并處理語句,往往會產生不佳的 性能 ,本文針對使用 UNION ALL 代替 IF 語句的合并處理做一個測試,說明這種方法會帶來的負面影響 問題描述 業務 需求 如下: 有
關鍵字:sql
SQL Server的處理中,不少人有追求一句出結果的習慣,但必須注意的是,不恰當的合并處理語句,往往會產生不佳的性能,本文針對使用 UNION ALL 代替 IF 語句的合并處理做一個測試,說明這種方法會帶來的負面影響

問題描述

       業務需求如下:

       有表A和表B,這兩個表結構一致,為不同的業務服務,現在要寫一個存儲過程,存儲過程接受一個參數,當參數為0時,查詢表A,參數為1時,查詢表B。

 

A、一般的處理方法

IF @Flag = 0

    SELECT * FROM dbo.A

ELSE IF @Flag = 1

    SELECT * FROM dbo.B

 

B、一句的處理方法

SELECT * FROM dbo.A

WHERE @Flag = 0

UNION ALL

SELECT * FROM dbo.B

WHERE @Flag = 1

 

分析

       從語句的簡捷性來看,方法B具有技巧性,它們兩者之間,究竟那一個更好呢?你可能會從性能上來評估,以決定到底用那一種。單純從語句上來看,似乎兩者的效率差不多,下面通過數據測試來反映結果似乎和想像的一樣

 

建立測試環境(注,此測試環境是為幾個主題服務的,因此結構看起來有些怪異)

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97