日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

發(fā)布時(shí)間:2023/12/10 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 添加组合索引时,做相等运算字段应该放在最前面 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

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

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)) )--填充數(shù)字輔助表 --DROP TABLE #numSELECT row_number() over( order BY customerid ) AS number INTO #num FROM adventureworks.sales.Individual--插入測試數(shù)據(jù) INSERT demo1 (gender,age) SELECT CASE WHEN number%2=0 THEN 'f'ELSE 'm'END,abs(checksum(newid()))%80 FROM #num

?

創(chuàng)建如下的索引:

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

查詢?nèi)缦碌恼Z句:

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.

?

現(xiàn)在刪除原來的索引,創(chuàng)建低選擇性在前的索引

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,由此產(chǎn)生性能提升

?

總結(jié):1:做等式運(yùn)算的字段放在最前面,如果有多個(gè)等式運(yùn)算,才要考慮等式運(yùn)算字段的選擇性

???????

轉(zhuǎn)載于:https://www.cnblogs.com/fly_zj/archive/2012/08/11/2633629.html

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。