Что такое эффективный способ пролистывания очень больших наборов результатов в SQL Server 2005?

Правило брандмауэра действительно небезопасно (вы разрешаете всем в Интернете подключаться к вашему экземпляру GCE, используя все порты), и, возможно, другое правило брандмауэра блокирует это правило, поскольку приоритет действительно низкий (чем больше число приоритетов , более низкий приоритет имеет). Вы следовали этому учебнику? добавив listen_addresses = '*', вам необходимо перезапустить службу PostgreSQL с помощью sudo service postgresql restart.

Кроме того, вам нужно создать 2 правила брандмауэра, одно для входа и другое для выхода. Оба для приема трафика на tcp:5432, не могли бы вы создать 2 правила брандмауэра с большим приоритетом, которые принимают трафик с этого порта с меньшим диапазоном IP-адресов?

6
задан 11 revs, 3 users 100% 20 October 2008 в 20:16
поделиться

2 ответа

Ну, для Вашего демонстрационного запроса ROW_COUNT должен быть довольно быстрым с тысячами строк, если у Вас есть индекс на Вашем поле PostDate. Если Вы не делаете, сервер должен выполнить полное сканирование кластерного индекса на Вашем PK, практически загрузить каждую страницу, выбрать Ваше поле PostDate, вид им, определить строки, чтобы извлечь для набора результатов и снова выбрать те строки. Это - вид создания временного индекса много раз (Вы могли бы видеть шпульку таблицы/индекса в плоскости).

Неудивительный Вы получаете тайм-ауты.

Мое предложение: установите индекс на PostDate DESC, это - то, через что ROW_NUMBER пробежится - (ORDER BY PostDate DESC...)

Что касается статьи Вы обращаетесь к - я сделал в значительной степени подкачку страниц и материал с SQL Server 2000 в прошлом без ROW_COUNT, и подход, используемый в статье, является самым эффективным. Это не работает при всех обстоятельствах (Вам нужны уникальные или почти уникальные значения). Обзор некоторых других методов здесь.

.

0
ответ дан 17 December 2019 в 00:16
поделиться

row_number () техника должен быть быстрым. Я видел хорошие результаты для 100 000 строк.

Вы использующий row_number () подобный следующему:

SELECT column_list
FROM
   (SELECT column_list
         ROW_NUMBER() OVER(ORDER BY OrderByColumnName) as RowNum
    FROM MyTable m
   ) as DerivedTableName
WHERE RowNum BETWEEN @startRowIndex AND (@startRowIndex + @maximumRows) - 1

... и у Вас есть закрывающий индекс для column_list и/или индекс на столбце 'OrderByColumnName'?

7
ответ дан 17 December 2019 в 00:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: