首页 > 解决方案 > 简单 SELECT 的性能不佳

问题描述

在此处输入图像描述我有一个非常简单的 SELECT 语句,它花费的时间比它应该的要多得多。它只从一个没有 JOIN、没有计算列的表中进行选择。该表不是特别大(300 万行,小行大小)。我有一个合适的查询索引(SQL Profile 显示它正在被使用),它最近被重建(每周)并且统计信息是最新的(每天)。我曾尝试将 SELECT 放入存储过程,但这无济于事。我也尝试过使用 WITH (NOLOCK),但没有太大的改进。它经常被查询但不是很频繁——它不在我们应用程序的前 50 个查询中。结果大小通常为 1 - 5 行。该表上也有相当数量的 INSERT / UPDATE 流量,比 SELECT 流量少一点。

带有 SELECT 的存储过程是:

CREATE PROCEDURE [dbo].[fetchcurrentichecklistitemanswers] @p_ichecklistitemid Int
AS

DECLARE @ichecklistitemid Int = @p_ichecklistitemid

SELECT * FROM ichecklistitemanswers WITH (NOLOCK) WHERE ichecklistitemid = @ichecklistitemid AND status = 2 ORDER BY ordering ASC

GO

关于还有什么可能会减慢这样的简单 SELECT 的任何想法?

[编辑 -- 添加执行计划] 查询在 Management Studio (instant) 中运行很快,但在应用程序中,查询时间平均超过 1 秒。

标签: sql-servertsqlquery-performance

解决方案


您可以在该列上添加索引:

CREATE INDEX idx ON ichecklistitemanswers(ichecklistitemid)
INCLUDE(status, ordering) WHERE status=2;

推荐阅读