У меня есть следующие таблицы:Multiple слева присоединяется и производительность
продуктов - 4500 записей
поле: идентификатор, Код, имя, псевдоним, цена, special_price, количество, по убыванию, фото, manufacturer_id, model_id , хиты, издательство
products_attribute_rel - 35000 записей
Поля: идентификатор, product_id, attribute_id, attribute_val_id
attribute_values - 243 записей
поля: идентификатор, attr_id, стоимость, заказ
производителей - 29 записей
Поля: идентификатор, название, издательство
модели - 946 записей
поля: ID, manufacturer_id, название, издательство
Так я получаю данные из этих таблиц с помощью одного запроса:
SELECT jp.*,
jm.id AS jm_id,
jm.title AS jm_title,
jmo.id AS jmo_id,
jmo.title AS jmo_title
FROM `products` AS jp
LEFT JOIN `products_attribute_rel` AS jpar ON jpar.product_id = jp.id
LEFT JOIN `attribute_values` AS jav ON jav.attr_id = jpar.attribute_val_id
LEFT JOIN `manufacturers` AS jm ON jm.id = jp.manufacturer_id
LEFT JOIN `models` AS jmo ON jmo.id = jp.model_id
GROUP BY jp.id HAVING COUNT(DISTINCT jpar.attribute_val_id) >= 0
Этот запрос является медленным, как ад. Для обработки требуется несколько секунд mysql. Итак, как можно было бы улучшить этот запрос? С небольшими кусками данных он отлично работает . Но я думаю, что все руины products_attribute_rel
стол, который имеет 35000 записей.
Ваша помощь будет оценена.
РЕДАКЦИЯ
EXPLAIN
Результаты SELECT
запроса:
Возможно, вам понадобится создать некластерные индексы покрытия. –
Используете ли вы какой-либо метод индексации, например b-tree? – DonCallisto
поставьте 'EXPLAIN' перед' SELECT' и покажите нам результат. Это может помочь нам выяснить, что такое узкие места. – Mike