Запрос на выборку. Как упростить?
|
|
Пятница, 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
-
Запись понравилась
-
0
Процитировали
-
0
Сохранили
-