Sql 如何降低非聚集索引扫描成本

Sql 如何降低非聚集索引扫描成本,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个在MS Access上运行的查询,执行计划中的非聚集扫描在我们的SSMS中的成本为100%。此查询具有第二高的处理时间,这意味着执行此查询时会降低应用程序的速度。我想知道是否有人知道我能做些什么来降低这个非聚集索引的成本%?下面是调用此表的查询、此表的索引和执行计划 SELECT "ContactID" ,"ContactName" FROM "dbo"."Contacts" 执行计划如下: 以下是此慢速查询所引用的表中的索引: 您的查询没有WHERE子句,因此无法避免扫描整个表

我有一个在MS Access上运行的查询,执行计划中的非聚集扫描在我们的SSMS中的成本为100%。此查询具有第二高的处理时间,这意味着执行此查询时会降低应用程序的速度。我想知道是否有人知道我能做些什么来降低这个非聚集索引的成本%?下面是调用此表的查询、此表的索引和执行计划

SELECT "ContactID" ,"ContactName"  FROM "dbo"."Contacts" 
执行计划如下:

以下是此慢速查询所引用的表中的索引:


您的查询没有WHERE子句,因此无法避免扫描整个表,因为您要求返回每一行。

您的查询没有WHERE子句,因此无法避免扫描整个表,因为您要求返回每一行。

我是否需要使用任何新索引或其他方法加快此过程@乔Stefanelli@ETA:将足够的RAM放入SQL Server以缓存整个表,并确保SQL Server和Access客户端应用程序之间的LAN速度尽可能快。或者只查询实际需要的行,而不是整个表。@您的查询已经使用了可能的最佳索引。也就是说,它通过包含SELECT子句中的所有列来覆盖查询。正如我在回答中提到的,如果没有WHERE子句来减少返回的行数,这是最好的。使用覆盖索引,使其进行索引扫描,而不是表扫描,这是这个特定查询的最佳结果。如果这是一个应用程序的问题,那么你可能会想让你的应用程序做一些缓存或其他一些设计策略,不需要你从表格中提取每一个记录,不管怎样,我可以用任何新的索引或任何东西更快地使这个过程更快。乔Stefanelli@ETA:将足够的RAM放入SQL Server以缓存整个表,并确保SQL Server和Access客户端应用程序之间的LAN速度尽可能快。或者只查询实际需要的行,而不是整个表。@您的查询已经使用了可能的最佳索引。也就是说,它通过包含SELECT子句中的所有列来覆盖查询。正如我在回答中提到的,如果没有WHERE子句来减少返回的行数,这是最好的。使用覆盖索引,使其进行索引扫描,而不是表扫描,这是这个特定查询的最佳结果。如果这是应用程序的问题,那么您可能需要考虑应用程序执行某种缓存或其他一些不需要从表中提取每条记录的设计策略。