我的查询非常简单,但有时会出现超时异常。
SELECT TOP 100 *
FROM [cmn].[ProductChange]
WHERE shop_id = @shopId
ORDER BY changed_at DESC
这是执行计划:
如果我在 SSMS 中测试查询,第一次非常慢,超过 30 秒,但下一次,速度快得多。
这是表的主键:
ALTER TABLE [cmn].[ProductChange]
ADD CONSTRAINT [PK_cmn_ProductChange]
PRIMARY KEY CLUSTERED ([product_id] ASC)
WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ONLINE = OFF, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
我有大约 350k 行,我认为没有那么多。他们是吗?
我在商店中只有一个 FK,PK 是一个外部 ID,它没有连接到任何其他表。
我怎样才能使这个查询更快?
在
shop_id
列上创建非聚集索引。这将导致从键查找进行索引扫描,并带来更好的性能。