Мне интересно, как Google это делает. У меня много медленных запросов, когда речь идет о количестве страниц и общем количестве результатов. Google возвращает значение счета 250 000,00 за долю секунды.SQL-сортировка, пейджинг, фильтрация лучших практик в ASP.NET
Я имею дело с видами сетки. Я создал собственный пейджер для gridview, который требует, чтобы SQL-запрос возвращал количество страниц на основе фильтров, установленных пользователем. Фильтры не менее 5, которые включают ключевое слово, категорию и подкатегорию, фильтр диапазона дат и фильтр сортировки сортировки для сортировки. Запрос содержит около 10 массивных табличных левых объединений.
Этот запрос выполняется каждый раз, когда выполняется поиск, а выполнение запроса выполняется в среднем 30 секунд - будь то подсчет или выбор. Я считаю, что это замедляет работу, это моя строка запросов включительных и эксклюзивных фильтров диапазона дат. Я заменил (< =,> =) на МЕЖДУ И И, но все же я испытываю ту же проблему.
Смотрите запрос здесь: http://friendpaste.com/4G2uZexRfhd3sSVROqjZEc
У меня есть проблемы с параметром долго Диапазон дат.
Проверьте свою таблицу, содержащую даты: http://friendpaste.com/1HrC0L62hFR4DghE6ypIRp
UPDATE [9/17/2010] Я минимизированы мою дату запроса и убрано время. Я попытался уменьшить объединение для моего запроса на подсчет (у меня на самом деле проблема с моим счетчиком фильтров, который занимает много времени, чтобы вернуть результат из 60 тыс. Строк).
SELECT COUNT(DISTINCT esched.course_id)
FROM courses c
LEFT JOIN events_schedule esched
ON c.course_id = esched.course_id
LEFT JOIN course_categories cc
ON cc.course_id = c.course_id
LEFT JOIN categories cat
ON cat.category_id = cc.category_id
WHERE 1 = 1
AND c.course_type = 1
AND active = 1
AND c.country_id = 52
AND c.course_title LIKE '%cook%'
AND cat.main_category_id = 40
AND cat.category_id = 360
AND (
(2010-09-01' <= esched.date_start OR 2010-09-01' <= esched.date_end)
AND
('2010-09-25' >= esched.date_start OR '2010-09-25' >= esched.date_end)
)
Я только заметил, что мой запрос выполняется довольно быстро, когда у меня есть фильтр для полей моей основной или подкатегории. Однако, когда у меня есть только фильтр даты, а диапазон - месяц или неделя, он должен подсчитывать много строк и выполняется в среднем за 30 секунд.
Эти статические поля:
AND c.course_type = 1
AND active = 1
AND c.country_id = 52
UPDATE [9/17/2010] Если создать хеш для этих трех полей и сохранить его на одном поле будет делать изменения в скорости?
Это мои динамические поля:
AND c.course_title LIKE '%cook%'
AND cat.main_category_id = 40
AND cat.category_id = 360
// ?DateStart and ?DateEnd
UPDATE [9/17/2010]. Теперь моя проблема является ведущим% в LIKE запроса
Вывесит обновленный объяснить
Вы применили соответствующие индексы к соответствующим полям поиска? –
Привет, У меня нет доступа к базе данных прямо сейчас. Обновит вас, ребята, завтра. –
«Запрос содержит около 10 массивных табличных левых соединений» - это, безусловно, не помогает;) – eglasius