выполнение запроса SELECT TOP с помощью ORDER BY - следует ли использовать индекс или «отсортированное представление» для повышения производительности - PullRequest
2 голосов
/ 01 февраля 2010

Этот запрос (часть sproc) будет выполняться довольно много:

SELECT TOP (@numRecords)  BlogPost.postId,BlogPost.creationDate,
        BlogPost.header,BlogPost.markedupContentAbstract
     FROM dbo.BlogPost ORDER BY BlogPost.creationDate DESC

Должен ли я поместить индекс в поле creationDate в таблице BlogPost?Должен ли я иметь представление, где упорядочены записи BlogPost, а затем просто ВЫБРАТЬ ТОП из этого?

Подробности: с использованием SQL Server 2008.

Ответы [ 3 ]

4 голосов
/ 01 февраля 2010

Индекс на CreationDate (Make sute it Descending Order ) - лучший маршрут.

Для наглядности:

CREATE NONCLUSTERED INDEX [IX_BlogPost_CreationDate] 
ON BlogPost
( CreationDate DESC )
2 голосов
/ 01 февраля 2010

Вы не можете создать представление с ORDER BY, если не добавите TOP в это представление.

Вы можете создать индекс для creationDate и охватить все остальные столбцы, которые вы используете в списке SELECT:

CREATE INDEX ix_blogpost_creationdate__other ON BlogPost (creationDate) INCLUDE (postId, header, markedupContentAbstract)
0 голосов
/ 01 февраля 2010

Простое создание представления не принесет никакой пользы. Вы можете посмотреть на индексированные представления, но я не помню, можете ли вы упорядочить представление, а затем добавить к нему индекс. Я бы не рекомендовал такой подход, поскольку вы тянете только из одного стола.

Вы можете добавить индекс, что позволит избежать операции сортировки, которая будет выполнена.

...