避免在查询中使用"SELECT TOP 1"和"ORDER BY"

eli*_*uez 4 sql database sql-server sql-server-2008

我在sql server 2008中拥有大量数据的表

|ID|Name|Column_1|Column_2|
|..|....|........|........|
Run Code Online (Sandbox Code Playgroud)

超过18,000条记录.所以我需要具有最低值的行Column_1是日期,但可以通过任何数据类型(未分类),所以我使用这些句子

SELECT TOP 1 ID, Name from table ORDER BY Column_1 ASC
Run Code Online (Sandbox Code Playgroud)

但这非常缓慢.我认为我不需要整理整个表格.我的问题是如何使用TOP 1和获得相同的日期ORDER BY

fre*_*ler 8

我不明白为什么18,000行信息​​会导致太慢的减速,但显然没有看到你存储的数据是什么.

如果您经常使用该Column_1字段,那么我建议您在其上放置一个非聚集索引...这将加快您的查询速度.

你可以通过Sql Server Management Studio"设计"你的表,或直接通过TSQL来实现它...

CREATE INDEX IX_myTable_Column_1 ON myTable (Column_1 ASC)
Run Code Online (Sandbox Code Playgroud)

有关在此处创建索引的MSDN的更多信息


更新感谢@GarethD的评论,他帮我解决了这个问题,因为我实际上并没有意识到这一点.

作为上述TSQL语句的一个额外部分,如果包含将在索引中使用的其他列的名称,它将提高查询的速度....

CREATE INDEX IX_myTable_Column_1 ON myTable (Column_1 ASC) INCLUDE (ID, Name)
Run Code Online (Sandbox Code Playgroud)

正如GarethD指出的那样,使用这个SQLFiddle作为证明,执行计划要快得多,因为它避免了"RID"(或行标识符)查找.

有关在此处创建包含列的索引的MSDN的更多信息

谢谢@GarethD