2016-08-12 6 views
0

私は注文日を含むテーブルオーダーを持っています。SQL:効率的に最後のレコードを取得

WarehouseId | OrderId | ItemId | OrderDate 
------------------------------------------- 
      1 |  1 |  1 | 2016-08-01 
      1 |  2 |  2 | 2016-08-02 
      1 |  3 |  5 | 2016-08-10 
      2 |  1 |  1 | 2016-08-05 
      3 |  1 |  6 | 2016-08-06 

(テーブルを簡略化し、のみ必要なフィールドを示している)

効率的に特定の倉庫の最後の順序を選択するには?私は現在、午前の操作を行います。私は、ソート実行して、特定の倉庫のために百万円(またはそれ以上)の注文を持っていると、それはあまりにも遅くなる最初のレコードを選択したときに

SELECT TOP 1 * FROM tblOrder WHERE WarehouseId = 1 ORDER BY OrderDate DESC 

私の関心は、ある(と思います?)。

最後の注文レコードを選択する効率的な方法はありますか?

おかげ

+0

ネクタイがあれば、どのような結果になるでしょうか? (最後の日付が同じ2行) – jarlh

+0

あなたのアプローチはあまり高価ではないので、テーブルにインデックス(WarehouseID、OrderDate)がある場合は正常に動作するはずです。 –

+0

多くの場合、orderdateフィールドにインデックスを設定することを検討してください。これにより処理速度が向上します(ただし、このテーブルに対する他のクエリに影響を与える可能性があることに注意してください。 DBA!)。それ以外の場合は、上記のコメント者のように同じ日付を心配している場合を除き、クエリは問題ありません。 – ADyson

答えて

1

あなたがそれに多くのことを行っている場合は、OrderDateフィールドにインデックスを設定することを検討できます。それは物事をスピードアップします(しかし、それはこのテーブルに対する他のクエリに影響を与えるかもしれないことに注意してください - それは複雑なトピックです、DBAに話してください)。

それ以外の場合は、同じ日付があるときに注文が心配されている場合を除き、クエリは問題ありません。この場合、OrderIDなどの2次フィールドも指定する必要がありますコメント)。

+0

私はOrderId(複合主キー)を使用しています。それはうまくいくはずですか? – Sam

+0

私はそう思っていただろう – ADyson

関連する問題