如何使用SQL查询降低聚簇索引扫描成本

use*_*292 24 sql-server indexing

如何降低下述查询的聚簇索引扫描成本

DECLARE @PARAMVAL varchar(3)

set @PARAMVAL = 'CTD'
select * from MASTER_RECORD_TYPE where RECORD_TYPE_CODE=@PARAMVAL
Run Code Online (Sandbox Code Playgroud)

如果我运行上面的查询它显示索引扫描99%

请在下面找到我的表格特点:

在此输入图像描述

我在下面粘贴了表格的索引:

CREATE TABLE [dbo].[MASTER_RECORD_TYPE] ADD  CONSTRAINT [PK_MASTER_REPORD_TYPE] PRIMARY KEY CLUSTERED 
(
    [Record_Type_Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 80) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)

请建议我如何降低索引扫描成本?

mar*_*c_s 30

首先 - 如果你搜索你,RECORD_TYPE_CODE你应该确保在该列上有一个索引.

除此之外主要有两件事:

  • 不要使用SELECT *- 总是必须返回聚集索引才能获得完整的数据页面; 使用SELECT明确指定要使用的列

  • 如果可能的话,尝试找到一种覆盖非聚簇索引的方法,例如包含满足查询所需的所有列的索引

如果你有这样一个覆盖非聚簇索引,那么查询优化器很可能会使用覆盖索引(而不是实际的聚簇索引,即全表数据)来获取结果