我在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 1
和ORDER BY
答案 0 :(得分:8)
我不明白为什么18,000行信息会造成太大的减速,但显然没有看到你存储的数据是什么。
如果您经常使用Column_1
字段,那么我建议您在其上放置一个非聚集索引...这将加快您的查询速度。
你可以通过Sql Server Management Studio“设计”你的表,或直接通过TSQL来实现...
CREATE INDEX IX_myTable_Column_1 ON myTable (Column_1 ASC)
有关MSDN about creating indexes here
的更多信息更新感谢@GarethD的评论,他帮我解决了这个问题,因为我实际上并没有意识到这一点。
作为上述TSQL语句的一个额外部分,如果您包含将在索引中使用的其他列的名称,它将提高查询的速度....
CREATE INDEX IX_myTable_Column_1 ON myTable (Column_1 ASC) INCLUDE (ID, Name)
正如GarethD指出的那样,using this SQLFiddle as proof,执行计划要快得多,因为它避免了“RID”(或行标识符)查找。
有关MSDN about creating indexes with include columns here
的更多信息谢谢@GarethD
答案 1 :(得分:2)
这会更快吗?当我读到这个问题时,这就是我想到的代码:
Select top 1 ID, Name
from table
where Column_1 = (Select min(Column_1) from table)