4

私はSQLServer2008にたくさんのデータを含むテーブルを持っています

|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

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 に答える