日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

添加组合索引时,做相等运算字段应该放在最前面

發布時間:2023/12/10 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 添加组合索引时,做相等运算字段应该放在最前面 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

有一個通常的誤解,覺得應該把選擇性高的字段放在最前面,這通常只是針對一個字段的索引,對于組合索引,常常要把做等式運算的字段放在最前面,看看測試

USE AdventureWorks GOCREATE TABLE demo1 ( id INT identity(1,1) PRIMARY KEY,gender char(1) NOT NULL ,age int NOT NULL,DESCRIPTION varchar(1000) default(replicate('a',1000)) )--填充數字輔助表 --DROP TABLE #numSELECT row_number() over( order BY customerid ) AS number INTO #num FROM adventureworks.sales.Individual--插入測試數據 INSERT demo1 (gender,age) SELECT CASE WHEN number%2=0 THEN 'f'ELSE 'm'END,abs(checksum(newid()))%80 FROM #num

?

創建如下的索引:

CREATE INDEX ix_age_sex ON demo1(age,gender) include(description) WITH (online=on) ?

查詢如下的語句:

DBCC FREEPROCCACHE CHECKPOINT DBCC DROPCLEANBUFFERSSELECT age,gender,description FROM demo1 WHERE gender='f' AND age BETWEEN 30 AND 40

邏輯讀為:

(1236 row(s) affected)
Table 'demo1'. Scan count 1, logical reads 350, physical reads 3, read-ahead reads 346, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

?

現在刪除原來的索引,創建低選擇性在前的索引

DROP INDEX ix_age_sex ON demo1 CREATE INDEX ix_age_sex ON demo1(gender,age)INCLUDE (description) WITH (online=on)

在來查詢相同的語句:

DBCC FREEPROCCACHE CHECKPOINT DBCC DROPCLEANBUFFERSSELECT age,gender,description FROM demo1 WHERE gender='f' AND age BETWEEN 30 AND 40

邏輯讀為:

(1236 row(s) affected)
Table 'demo1'. Scan count 1, logical reads 181, physical reads 3, read-ahead reads 178, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

?

可以看到低選擇性的字段放在前面邏輯讀有350減少到了181,由此產生性能提升

?

總結:1:做等式運算的字段放在最前面,如果有多個等式運算,才要考慮等式運算字段的選擇性

???????

轉載于:https://www.cnblogs.com/fly_zj/archive/2012/08/11/2633629.html

總結

以上是生活随笔為你收集整理的添加组合索引时,做相等运算字段应该放在最前面的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。