Я уже реализовал два довольно быстрых способа разбиения по страницам большой таблицы базы данных MS SQL Server, которая содержит не менее 1,000,000
записей, но не смог определить плюсы и минусы любого метода, совет по любому из них был бы очень признателен:
Во-первых, запустить SQL-запрос и вернуть только значения первичного ключа отфильтрованных записей, указав предложение TOP, возможно, 100-1000. Затем их можно поместить в переменную сеанса на веб-сервере и соответствующим образом просмотреть, передав подмножество значений первичного ключа обратно на сервер.
Одним из положительных моментов этого является то, что фильтрация записей происходит только один раз, когда пользователь первоначально выполняет поиск, а во-вторых, это дает возможность пролистать весь набор записей по одному элементу за раз, если это необходимо, например, в предварительных просмотрах предстоящих записей, и т. д. Этот метод также дает некоторые преимущества в отношении дальнейшей фильтрации уже отфильтрованных записей, поскольку фильтруемые параметры могут быть определены путем предоставления списка значений первичного ключа обратно в SQL Server, таких как общие атрибуты, заголовок, директора и т. д.
Второй вариант — выполнять как фильтрацию, так и разбиение по страницам через SQL Server, предоставляя такие переменные, как «количество записей на страницу», «номер страницы» и т. д.
Преимущество этого заключается в том, что нет необходимости забивать веб-сервер пользовательскими сеансами, размер которых, несомненно, будет составлять не менее 1000+ байт каждый, что только вызовет проблемы в долгосрочной перспективе по мере увеличения числа пользователей веб-сайта. Напротив, недостатки в конечном счете — это то, что я перечислил как положительные стороны для первого варианта, такие как отсутствие возможности определять параметры фильтрации для всего набора записей, имеющего только одну страницу или подмножество значений первичного ключа для работать с на веб-сервере.
Что думают все, учитывая вышесказанное, особенно в отношении хранения значений первичного ключа для результатов в переменной сеанса, памяти, альтернативных параметрах и т. д.?