Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何使用SQL查询降低聚集索引扫描成本_Sql Server_Indexing - Fatal编程技术网

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

Sql server 如何使用SQL查询降低聚集索引扫描成本,sql-server,indexing,Sql Server,Indexing,如何降低以下查询的聚集索引扫描成本 DECLARE @PARAMVAL varchar(3) set @PARAMVAL = 'CTD' select * from MASTER_RECORD_TYPE where RECORD_TYPE_CODE=@PARAMVAL 如果我运行上面的查询,它将显示99%的索引扫描 请在下表中找到我的特殊性: 在下面,我粘贴了表的索引: CREATE TABLE [dbo].[MASTER_RECORD_TYPE] ADD CONSTRAINT [PK_

如何降低以下查询的聚集索引扫描成本

DECLARE @PARAMVAL varchar(3)

set @PARAMVAL = 'CTD'
select * from MASTER_RECORD_TYPE where RECORD_TYPE_CODE=@PARAMVAL
如果我运行上面的查询,它将显示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

请告知我如何降低索引扫描成本?

首先-如果您搜索
记录\u TYPE\u code
,您应该确保该列上有索引

除此之外,主要有两件事:

  • 不要使用
    选择*
    ——这将始终必须返回到聚集索引才能获得完整的数据页;使用明确指定要使用哪些列的
    选择

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


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

您需要尝试使用覆盖索引。但问题是您使用的是
SELECT*
。你真的需要整张唱片吗


无论哪种方式,都可以将
RECORD\u TYPE\u code
添加到另一个索引中,这将有助于查询,因为至少可以从索引页读取该字段。

在查询中,您使用了列
RECORD\u TYPE\u code
,它不属于
聚集索引,也不包括在任何
非聚集索引中。所以SQL优化器将决定扫描聚集索引以比较where子句谓词


你好,mate,谢谢你的及时回复,即使我使用了“从主记录类型中选择1”,也会产生相同的索引扫描成本。谢谢你的及时回复,请你指导我创建一个覆盖非聚集索引,该索引中包含哪些键你能帮我解决mate创建非聚集索引的问题吗[dbo]上的[MST_IDX_FOR_REC_TYPE]。[MASTER_RECORD_TYPE]([RECORD_TYPE_Code]ASC)与[PRIMARY]上的(PAD_INDEX=OFF,STATISTICS_norecocompute=OFF,SORT_IN_TEMPDB=OFF,IGNORE_DUP_KEY=OFF,DROP_EXISTING=OFF,ONLINE=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)一起GO Now index scan已经变成了100%@user1494292的索引搜索:好了-现在你有了索引搜索-这是获取(几行)数据的最有效(也是最快)的方法,是的,它是聚集索引=表的一部分。没有其他索引。