亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

SQL中WHERE變量IS NULL條件導致全表掃描問題的解決方法

2024-08-31 01:00:27
字體:
來源:轉載
供稿:網友

復制代碼 代碼如下:


SET @SQL = 'SELECT * FROM Comment with(nolock) WHERE 1=1
    And (@ProjectIds Is Null or ProjectId = @ProjectIds)
    And (@Scores is null or Score =@Scores)'


印象中記得,以前在做Oracle開發時,這種寫法是會導致全表掃描的,用不上索引,不知道Sql Server里是否也是一樣呢,于是做一個簡單的測試
1、建立測試用的表結構和索引:

復制代碼 代碼如下:


CREATE TABLE aaa(id int IDENTITY, NAME VARCHAR(12), age INT)
go
CREATE INDEX idx_age ON aaa (age)
GO

2、插入1萬條測試數據:

復制代碼 代碼如下:


DECLARE @i INT;
SET @i=0;
WHILE @i<10000
BEGIN
  INSERT INTO aaa (name, age)VALUES(CAST(@i AS VARCHAR), @i)
  SET @i=@i+1;
END
GO


3、先開啟執行計劃顯示:
在SQL Server Management Studio的查詢窗口里,右擊窗口任意位置,選擇“包含實際的執行計劃”:

SQL中WHERE變量IS NULL條件導致全表掃描問題的解決方法

4、開始測試,用下面的SQL進行測試:

復制代碼 代碼如下:


DECLARE @i INT;
SET @i=100
SELECT * FROM aaa WHERE (@i IS NULL OR age = @i)
SELECT * FROM aaa WHERE (age = @i OR @i IS NULL)
SELECT * FROM aaa WHERE age=isnull(@i, age)
SELECT * FROM aaa WHERE age = @i


測試結果如下:

SQL中WHERE變量IS NULL條件導致全表掃描問題的解決方法

可以看到,即使@i有值,不管@i IS NULL是放在前面還是放在后面,都無法用到age的索引,另外age=ISNULL(@i,age)也用不上索引

最終結論,SQL Server跟ORACLE一樣,如果條件里加了 變量 IS NULL,都會導致全表掃描。

建議SQL改成:

復制代碼 代碼如下:


DECLARE @i INT;
SET @i=100

DECLARE @sql NVARCHAR(MAX)
SET @sql = 'SELECT * FROM aaa'
IF @i IS NOT NULL
    SET @sql = @sql + ' WHERE age = @i'
EXEC sp_executesql @sql, N'@i int', @i


當然,如果只有一個條件,可以設計成2條SQL,比如:

復制代碼 代碼如下:


DECLARE @i INT;
SET @i=100
IF @i IS NOT NULL
    SELECT * FROM aaa WHERE age = @i
ELSE
    SELECT * FROM aaa

但是,如果條件多了,SQL數目也變得更多,所以建議用EXEC的方案

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91免费精品国偷自产在线| 欧美超级乱淫片喷水| 国产一区二区三区日韩欧美| 中文字幕亚洲天堂| 91免费的视频在线播放| 欧美日韩国产第一页| 欧美有码在线观看视频| 久久久久久久久久久亚洲| 国产一区在线播放| 精品亚洲永久免费精品| 欧美日韩激情美女| 久久久久久久色| 欧美日韩激情网| 国产日本欧美视频| 久久成人综合视频| 国产国语刺激对白av不卡| 亚洲欧美中文日韩v在线观看| 日本欧美国产在线| 国产精品69久久| 555www成人网| 色99之美女主播在线视频| 欧美极品在线视频| 成人中文字幕+乱码+中文字幕| 国产一区二区在线免费| 夜夜狂射影院欧美极品| 欧美一区二三区| 久久久女人电视剧免费播放下载| 精品视频中文字幕| 国产91九色视频| 在线观看日韩欧美| 91成人在线观看国产| 亚洲a中文字幕| 久久伊人精品天天| 久久中文字幕视频| 黑人与娇小精品av专区| 中文字幕亚洲自拍| 国产精品成人aaaaa网站| 亚洲高清一二三区| 国产成人精品电影| 日韩在线播放av| 国产精品人人做人人爽| 国产色婷婷国产综合在线理论片a| 亚洲a级在线观看| 久久久久这里只有精品| 色综合伊人色综合网站| 欧美孕妇毛茸茸xxxx| 日韩亚洲第一页| 亚洲色图50p| 欧美丰满少妇xxxxx做受| 成人欧美一区二区三区黑人| 亚洲偷熟乱区亚洲香蕉av| 最近2019中文字幕mv免费看| 日韩视频亚洲视频| 久久精品视频免费播放| 91av国产在线| 久久久精品影院| 国产日韩欧美在线观看| 992tv成人免费影院| 国产成人拍精品视频午夜网站| 国产精品成人一区二区| 欧美中文字幕在线观看| 国内外成人免费激情在线视频| 日本精品久久久久久久| 国产精品一区二区三区久久| 日韩电视剧免费观看网站| 国内精品400部情侣激情| 国产精品一区二区三区久久久| 亚洲精品少妇网址| 国产aⅴ夜夜欢一区二区三区| 91成人在线视频| 亚洲成人久久久| 中文欧美日本在线资源| 久久久国产影院| 亚洲精品视频网上网址在线观看| 欧美日韩人人澡狠狠躁视频| 国产一区二区美女视频| 亚洲天堂第一页| 亚洲综合中文字幕68页| 国产福利精品在线| 日韩有码在线播放| 91av免费观看91av精品在线| 欧美日韩美女在线观看| 欧美极品少妇xxxxⅹ裸体艺术| 欧美成人合集magnet| 亚洲精品ady| 午夜伦理精品一区| 欧美午夜美女看片| 成人性生交大片免费看视频直播| 久久亚洲影音av资源网| 国产精彩精品视频| 国产精品成人一区| 亚洲天堂第二页| 色婷婷综合久久久久中文字幕1| 欧美裸体xxxx| 91精品在线播放| www.久久色.com| 成人免费xxxxx在线观看| 久久国产精品久久国产精品| 亚洲视频精品在线| 国产精品成av人在线视午夜片| 久久亚洲精品一区二区| 久久国产精品影视| 91午夜理伦私人影院| 国产精品久久久999| 欧美午夜片欧美片在线观看| 热99精品只有里视频精品| 久久久久国产一区二区三区| 成人免费高清完整版在线观看| 亚洲理论在线a中文字幕| 久久久亚洲欧洲日产国码aⅴ| 国产亚洲精品久久久优势| 国产精品免费电影| 国产成人拍精品视频午夜网站| 成人免费淫片aa视频免费| 久久久精品一区二区| 午夜精品一区二区三区视频免费看| 国产精品久久久久久久午夜| 国产精品美女在线| 4444欧美成人kkkk| 国产视频久久久久久久| 亚洲深夜福利网站| 午夜精品99久久免费| 日本午夜精品理论片a级appf发布| 亚洲精品免费在线视频| 国产91亚洲精品| 激情成人中文字幕| 日韩欧美大尺度| 韩国美女主播一区| 91高清视频免费观看| 日本一区二三区好的精华液| 91在线观看免费网站| 国产伦精品一区二区三区精品视频| 亚洲国产精品va在线观看黑人| 欧美一级片在线播放| 国产91精品视频在线观看| 久久好看免费视频| 精品夜色国产国偷在线| 97久久精品视频| 亚洲www在线| 国产美女久久精品香蕉69| 欧美成人免费大片| 精品国产一区二区三区在线观看| 国产一区二区三区视频免费| 永久免费毛片在线播放不卡| 久久99视频免费| 亚洲jizzjizz日本少妇| 这里只有精品视频| 亚洲欧美变态国产另类| 国产aⅴ夜夜欢一区二区三区| 亚洲小视频在线观看| 亚洲欧美国产日韩天堂区| 精品国产一区二区三区久久| 最近2019中文字幕在线高清| 一区二区三区视频在线| 久久精品中文字幕免费mv| 国产一区二区三区在线看| 欧美在线视频观看免费网站| 欧美大片va欧美在线播放| 国产精品白丝av嫩草影院| 中文字幕在线亚洲| 国产精品精品国产| 69视频在线免费观看| 日韩激情av在线免费观看| 国产精品美女免费视频|