天天看點

SQL Server 索引優化—— 查詢條件中等于、大于或小于條件在索引中的順序對性能的影響SQL Server 索引優化

SQL Server 索引優化

—— 查詢條件中等于、大于或小于條件在索引中的順序對性能的影響

一、準備測試表和資料

use test
go
create table tradeDetail(
       id int identity(1,1)
       ,productId int
       ,tradedate datetime
       ,[description] varchar(50)
)
create nonclustered index idx_tradeDetail_pid_tdate
on tradeDetail(productId asc,tradedate asc)
with(drop_existing=on)
insert into tradeDetail(productId,tradedate,description)
values(1,GETDATE(),'productA')
go 9900
insert into tradeDetail(productId,tradedate,description)
values(2,GETDATE(),'productB')
go 5000
insert into tradeDetail(productId,tradedate,description)
values(3,GETDATE(),'productC')
go 1000           

二、等于條件在索引中排列靠前,大于或小于在索引中排列靠後(見上面建立索引腳本)

set statistics io on
set statistics time on
select
       productID,tradedate
from dbo.tradeDetail
where productID=1 and tradedate>'2018-05-01'           
SQL Server 索引優化—— 查詢條件中等于、大于或小于條件在索引中的順序對性能的影響SQL Server 索引優化

三、大于或小于條件在索引中排列靠前,等于條件在索引中排列靠後(見下面建立索引腳本)

DBCC DROPCLEANBUFFERS  --清除緩沖區
DBCC FREEPROCCACHE  --删除計劃高速緩存中的元素
create nonclustered index idx_tradeDetail_pid_tdate
on tradeDetail(tradedate asc,productId asc)
with(drop_existing=on)
set statistics io on
set statistics time on
select
       productID,tradedate
from dbo.tradeDetail
where productID=1 and tradedate>'2018-05-01'           
SQL Server 索引優化—— 查詢條件中等于、大于或小于條件在索引中的順序對性能的影響SQL Server 索引優化

從上面的兩種結果來看,查詢條件中的等于條件、大于或小于條件對應的字段在索引中的排列順序對性能有極大影響,等于條件對應字段在索引中排列靠後,其邏輯讀取26,是等于條件對應字段在索引中排列靠前的5倍多。

是以,在建立多條件查詢的索引時,等于條件對應的字段要排在大于或小于條件對應的字段之前。

四、最後關閉統計、删除測試表

set statistics io off
set statistics time off
drop table tradeDetail           

如果喜歡,可以掃碼關注SQL Server 公衆号,将有更多精彩内容分享:

SQL Server 索引優化—— 查詢條件中等于、大于或小于條件在索引中的順序對性能的影響SQL Server 索引優化

繼續閱讀