У меня есть таблица предложений, которая имеет более 100 тыс. Строк, поэтому запрос ниже очень медленный (4сек - средний).Внутреннее соединение медленное выполнение
SELECT cat1.id AS cat1id,
cat1.title_gr AS title,
cat1.order
FROM categories_groups_cat1 AS cat1
INNER JOIN
(SELECT categories_id, categories_groups_cat1_id FROM
categories_vs_groups
GROUP BY categories_groups_cat1_id) AS vs
ON vs.categories_groups_cat1_id=cat1.id
INNER JOIN
(SELECT id, title_gr FROM
categories
GROUP BY title_gr) AS cats
ON cats.id=vs.categories_id
INNER JOIN
(SELECT category_gr FROM
offers
GROUP BY category_gr) AS offers
ON offers.category_gr=cats.title_gr
GROUP BY cat1.id
ORDER BY cat1.order ASC
таблица предлагает
`id` int(11) NOT NULL,
`title` text NOT NULL,
`description` text NOT NULL,
`image` text NOT NULL,
`price` float NOT NULL,
`start_price` float NOT NULL,
`brand` text NOT NULL
`category_gr` text NOT NULL
стол categories_groups_cat1
`id` int(11) NOT NULL,
`order` int(11) NOT NULL,
`title_gr` text NOT NULL
таблицы categories_vs_groups
`id` int(11) NOT NULL,
`categories_groups_cat1_id` int(11) NOT NULL,
`categories_id` int(11) NOT NULL
табличные категории
`id` int(11) NOT NULL,
`title_gr` char(255) NOT NULL
Я стараюсь выбирать из категорий_groups_cat1, где существуют предложения, поэтому я использую внутреннее соединение. Я не знаю, полностью ли это. Если будет другое более быстрое (эффективное) решение, я был бы признателен
100k строк ничего. Вы установили индексы и/или внешние ключи для своих таблиц? – WhoIsJohnDoe
Пожалуйста, отредактируйте свой вопрос с данными образца и желаемыми результатами. Я думаю, что запрос слишком сложный для того, что вы хотите. Кроме того, ваш запрос имеет 'offers.category_gr', но я не вижу этот столбец в таблице. –
Почему вы делаете так много подзапросов в своих объединениях? В чем цель? – rlanvin