Select 即使对于非常大的记录中的 10 条记录,查询也需要很长时间 table

Select query takes long time even for 10 records from a very big records table

我有一个非常大的记录table大约有 650 万条记录。当我尝试 select 一些记录甚至 10 条记录时,我必须等待很长的随机时间。

SELECT [Column1], [Column2], [Column3], [Column4], [Column5]
FROM [table]
WHERE deviceDataId = '640'
ORDER BY id ASC OFFSET 10 ROWS 
FETCH NEXT 10 ROWS ONLY

我的数据库部署在 azure 上,我也在本地系统下载并部署它,但需要相同的时间。

查询执行计划:

现在我们有了您的真实查询,我们可以看到它看起来您的列deviceDataId上没有索引;这意味着 entire table 需要扫描。因此,即使您只需要 10 行,也需要扫描所有 6.5M 行并检查 deviceDataId 的值。

如果您在您的列 deviceDataId 上创建一个索引,并且在您的查询中至少 INCLUDE 其他列创建索引,那么您将拥有一个覆盖索引,这将有很大帮助。这也 假设 id 是您订购 CLUSTERED INDEX 的列。

CREATE NONCLUSTERED INDEX IX_Table_DeviceTableID_Cols1_5
    ON dbo.[table] (deviceDataId)
    INCLUDE ([Column1], [Column2], [Column3], [Column4], [Column5]);

此外,正如我在评论中指出的那样,如果 deviceDataIdint,请在 WHERE 子句中使用 int 值。不要将数值用单引号引起来,这是针对文字字符串。

WHERE deviceDataId = 640