Как оптимизировать подкачку в SQL Server при заказе по неиндексированному полю - PullRequest
0 голосов
/ 19 января 2012

Я прочитал и следовал инструкциям здесь: Что такое эффективный метод разбивки на страницы с очень большими наборами результатов в SQL Server 2005? и что становится ясно, я упорядочиваю по неиндексированному полю - это потому, что это сгенерированное поле из вычислений - оно не существует в базе данных.

Я использую технику row_number (), и она работает довольно хорошо. Моя проблема в том, что моя хранимая процедура выполняет довольно большие объединения на значительном количестве данных, и я упорядочиваю по результатам этих объединений. Я понимаю, что каждый раз, когда я перехожу на страницу, он должен снова вызывать весь запрос (для обеспечения правильного порядка).

Что я хотел бы (не включая весь набор результатов в код клиента и подкачку там), так это то, что, как только SQL Server получил весь набор результатов, он мог бы затем пролистать , что

Есть ли какой-нибудь встроенный способ добиться этого? - Я думал, что это могут сделать виды, но я не могу найти информацию об этом.

РЕДАКТИРОВАТЬ: индексированные представления не будут работать для меня, так как мне нужно передать параметры. У любого есть еще идеи - я думаю, что я должен использовать memcached или иметь сервис, который создает индексы в фоновом режиме. Я просто хотел бы, чтобы у SQL Server был способ получить эту таблицу и удерживать ее, пока она разбита на страницы ...

1 Ответ

1 голос
/ 19 января 2012

Я не очень знаком с подкачкой, и, не зная логики вашей процедуры, я могу только догадываться, что вы выиграете от IndexedViews или #TeoraryTables с индексами.

Вы упомянули, что заказывали- генерируется индексированное поле, эта информация в сочетании с тем фактом, что ваша процедура каждый раз вызывает весь запрос, заставит меня поверить, что вы можете сделать этот запрос IndexedView.Вы получите лучшую производительность, если получите к нему доступ несколько раз, и это также позволит вам добавить индекс в поле, по которому вы заказываете.

Вы также можете использовать #TeoraryTable, если он каким-то образом останется в живых во время вашегозапросы подкачки ... Вставьте набор данных, с которым вы работаете, в таблицу #TeoraryTable, затем вы можете создать индекс с T-SQL для сгенерированного столбца.

Индексированные представления для SQL Server 2005: http://technet.microsoft.com/en-us/library/cc917715.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...