我正在执行以下查询: -
select top 32 * from TweetEntity order by FavoriteCount desc, LastModifiedDateTime desc
Run Code Online (Sandbox Code Playgroud)
这至少需要30秒才能执行.该表包含至少300,000条记录.
但是当我执行以下查询时:
select top 32 * from TweetEntity
Run Code Online (Sandbox Code Playgroud)
执行时间不到一秒.我无能为力 - 如何在不到一秒的时间内执行我的第一个查询.我应该检查什么 有人可以指出我正确的方向.
当您介绍时ORDER BY,Sql需要根据该顺序评估32个最高行,而不是表中的任何32行.值得注意的是,Sql没有合适的索引用于评估查询.
因此,TL;DR您需要添加索引TweetEntity(FavoriteCount desc, LastModifiedDateTime desc)以提高性能,例如:
CREATE NONCLUSTERED INDEX IX_TweetEntity_Favourite
ON dbo.TweetEntity(FavoriteCount desc, LastModifiedDateTime desc);
Run Code Online (Sandbox Code Playgroud)
如果您的查询是表上最重要/最常见的查询,您还可以考虑将其更改为聚簇索引.
编辑,重新可以在桌面上创建尽可能多的非聚集索引吗?
但是,有一个问题 - 每个指数都增加了:
欢迎使用索引的黑色艺术 - 没有简单的公式 - 每次考虑添加新索引时,您都需要仔细评估每个新索引对现有索引的好处.在许多情况下,您将能够调整现有索引,而不是每次都添加新索引.