如何解决即使对于非常大的记录表中的 10 条记录,选择查询也需要很长时间
我有一个非常大的记录表,大约有 650 万条记录。当我尝试从中选择一些记录时,即使是 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
上没有索引;这意味着需要扫描整个表。因此,即使您只需要 10 行,也需要扫描所有 6.5M 行并检查 deviceDataId
的值。
如果您在 deviceDataId
列上创建索引,并在查询中最少创建 INCLUDE
其他列,那么您将拥有一个非常有用的覆盖索引。这也假设 id
是您订购 CLUSTERED INDEX
的列。
CREATE NONCLUSTERED INDEX IX_Table_DeviceTableID_Cols1_5
ON dbo.[table] (deviceDataId)
INCLUDE ([Colomn1],[Colomn2],[Colomn3],[Colomn4],[Colomn5]);
此外,正如我在评论中指出的,如果 deviceDataId
是 int
,请在 int
子句中使用 WHERE
值。不要将数值用单引号括起来,这是用于文字字符串。
WHERE deviceDataId = 640
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。