|
|
|
| Добрый день!
Имеются таблицы:
CREATE TABLE IF NOT EXISTS `params` (
param_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
param_group_id INT NULL DEFAULT NULL,
param_name TEXT NULL
) ENGINE = MyIsam DEFAULT CHARSET CP1251;
CREATE TABLE IF NOT EXISTS `params_values` (
value_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
param_id INT NOT NULL,
value_data TEXT NULL
) ENGINE = MyIsam DEFAULT CHARSET CP1251;
CREATE TABLE IF NOT EXISTS `products_params` (
p_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
product_id INT NOT NULL,
param_id INT NOT NULL,
value_id INT NOT NULL
) ENGINE = MyIsam DEFAULT CHARSET CP1251;
|
Ну и есть еще таблица products с столбцами product_id и category_id
В таблице params - более 2х тыс. записей, в таблице params_values - более 35 тыс., product_params - 800 тыс., products - 30 тыс.
Есть запрос:
SELECT products.category_id, count(products.category_id) as total, products_params.param_id, params_values.value_data FROM products_params
LEFT JOIN products ON products_params.product_id = products.product_id
LEFT JOIN params_values ON products_params.value_id = params_values.value_id
WHERE products.category_id = $category_id AND params_values.param_id = $param_id
GROUP BY params_values.value_id
ORDER BY params_values.value_data ASC
|
Но этот запрос очень долго выполняется, Причем на одной странице нужно выполнить до 5 таких запросов с разным $param_id.
Вопрос к знатокам, как повысить производительность такого запроса ? | |
|
|
|
|
|
|
|
для: mastergrom
(25.12.2010 в 15:57)
| | Как минимум нужно проиндексировать все ключи, которые вы используете для связи таблиц - тогда СУБД не потребуется перелапачивать таблицу по несколько раз, она воспользуется ключами, которые будут автоматически поддерживаться в отсортированном состоянии. | |
|
|
|