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

Каков ожидаемый результат, если есть связь? (Например, две строки с той же последней датой.) – jarlh

+0

Ваш подход не очень дорог и должен хорошо работать в этом случае, тогда на вашем столе есть индекс (WarehouseID, OrderDate). –

+0

, если вы собираетесь это сделать, вы можете рассмотреть возможность установки индекса в поле orderdate, что ускорит работу (но имейте в виду, что это может повлиять на другие запросы против этой таблицы - это сложная тема, поговорить с DBA!). В противном случае ваш запрос будет прекрасен, если вы не беспокоитесь о идентичных датах, подобных приведенному выше комментатору. – ADyson

ответ

1

Если вы собираетесь к нему много, вы могли бы рассмотреть вопрос о создании индекса на OrderDate поле. Это ускорит работу (но имейте в виду, что это может повлиять на другие запросы против этой таблицы - это сложная тема, поговорите с администратором баз данных!).

В противном случае ваш запрос будет прекрасен, если вы не беспокоитесь о заказе, когда есть идентичные даты, и в этом случае вы также должны принять решение по второстепенному полю, например OrderID (который вы предложили в Комментарии).

+0

Я использую OrderId (который представляет собой составной первичный ключ). Думаю, все должно быть хорошо? – Sam

+0

Я бы так подумал – ADyson

Смежные вопросы