4

我在 sql server 2008 中有一张包含大量数据的表

|ID|Name|Column_1|Column_2|
|..|....|........|........|

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

SELECT TOP 1 ID, Name from table ORDER BY Column_1 ASC

但这非常非常慢。而且我认为我不需要对整个表格进行排序。我的问题是如何在不使用TOP 1and的情况下获得相同的日期ORDER BY

4

2 回答 2

8

我不明白为什么 18,000 行信息会导致速度过慢,但这显然是看不到您存储的数据是什么。

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

您可以通过 Sql Server Management Studio 或直接通过 TSQL 来“设计”您的表...

CREATE INDEX IX_myTable_Column_1 ON myTable (Column_1 ASC)

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


感谢@GarethD 的评论帮助我更新,因为我实际上并没有意识到这一点。

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

CREATE INDEX IX_myTable_Column_1 ON myTable (Column_1 ASC) INCLUDE (ID, Name)

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

有关MSDN 上有关使用包含列创建索引的更多信息,请单击此处

谢谢@GarethD

于 2012-10-25T16:30:40.370 回答
3

这会更快吗?当我阅读这个问题时,这是我想到的代码:

Select top 1 ID, Name 
from table 
where Column_1 = (Select min(Column_1) from table)
于 2012-10-25T16:55:29.467 回答