-Поиск по дневнику

Поиск сообщений в rss_sql_ru_access_programming

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 16.03.2006
Записей:
Комментариев:
Написано: 4


Запрос на выборку. Как упростить?

Пятница, 30 Ноября 2018 г. 08:28 + в цитатник
Здравствуйте люди :) Подскажите в таком вопросе. Значит суть такая. Есть таблицы товары и категории в базе access. В товарах есть различные параметры. В категориях только код товара и категории к которым он принадлежит. Один товар обычно в нескольких категориях состоит. Необходимо сделать такую выборку, которая будет отображать например 20 товаров на n странице с нужными параметрами и в выбранной категории. Например если страница первая - то первые 20 товаров, удовлетворяющие поиску. Если страница вторая, то уже 20 товаров после тех, которые на первой странице.
Каким образом это реализовано у меня на данный момент. А очень плохо. У меня категории находятся в таблице товаров в виде строки. И я использую оператор LIKE для поиска совпадений в этой строке. А запрос на выборку следующий:


SELECT * FROM (SELECT TOP 20 * FROM (SELECT TOP 40 * FROM `Товары` WHERE `Наличие`=true AND `Цена`>=70 AND `Категория` LIKE '%Металл%' ORDER BY `Дата добавления` DESC) ORDER BY `Дата добавления` ASC) ORDER BY `Дата добавления` DESC;

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

SELECT COUNT(*) FROM `Товары` WHERE `Наличие`=true AND `Цена`>=70 AND `Категория` LIKE '%Металл%'

И получаю значение через 250мс. При это у меня всего лишь 50.000 записей. Страшно представить что будет при миллионе, когда будут идти запросы сразу от многих клиентов.
В связи с этим вопрос. Как ускорить работу запроса?
Понятное дело надо выносить категории в отдельную таблицу. Добавить в запросе вторую таблицу и в выборке сделать т1.категория=металл and т1.кодтовара=т2.код. Кажется так. Но тогда база будет для каждой строки категорий делать запрос на сравнение всех кодов в первой таблице? Не получится шило на мыло? И есть ли какой-то способ постраничной выборки быстрее, чем используются мной?

Модератор: Тема перенесена из форума "MySQL".

https://www.sql.ru/forum/1306073/zapros-na-vyborku-kak-uprostit


 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку