Сохранить все считать и получить отфильтрованные результаты в T-SQL? - PullRequest
0 голосов
/ 14 марта 2011

Я создал сложную страницу поиска sql server 2008 / coldfusion, которая выполняет поиск по различным таблицам.

Слева находится список категорий плюс категория «все» по каждой категории или типу.результат - общее количество результатов этого типа, найденных в текущем результате поиска.

У меня все хорошо, но я надеюсь, что есть более оптимальный подход.

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

И из-за этого я понял, что это проблема, которую я имеюбыло во многих других программах в coldfusion / sql.

Где вы хотите уменьшить количество результатов на какое-то поле в select, но вам нужно сохранить исходное общее количество записей.

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

Эта программа 1 cfc, 1 cfm, 1 хранимая процедура и jquery / ajax внутри cfm для вызова cfc.

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

Однако, если результатов более 20, в нижней части экрана отображается кнопка, позволяющая через ajax получить еще 20 записей.

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

Это своего рода сложная проблема, поэтому не может быть никаких ответов ...

Спасибо всем за попытку ..

Ответы [ 2 ]

1 голос
/ 14 марта 2011

Я бы запустил «большой» запрос один раз, а затем вставил его в переменную SESSION.Затем я бы использовал Query-of-Query для возврата подмножеств, основанных на фильтрах.

Основной запрос всегда существует, поэтому вы можете запрашивать его или использовать метаданные типа bigQuery.recordCount.Ваш QofQ - это меньший набор данных, который вы можете использовать для отображения.И вы можете повторно применить фильтры без необходимости возвращаться в базу данных.

0 голосов
/ 14 марта 2011

Ну, вам нужно выполнить запрос (или count(*)) хотя бы один раз , чтобы получить общее число.Вы можете:

  • Кэшировать этот запрос и снова и снова ссылаться на recordcount кэшированного запроса

  • Сохранить количество записей в области сеансадо следующего запуска этого пользователя

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