我有一个非常简单的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(即时)中运行很快,但是在应用程序中,查询时间平均超过1秒。
答案 0 :(得分:1)
您可以在该列上添加索引:
CREATE INDEX idx ON ichecklistitemanswers(ichecklistitemid)
INCLUDE(status, ordering) WHERE status=2;