Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Оптимизация запросов
 
 автор: mastergrom   (25.12.2010 в 15:57)   письмо автору
 
 

Добрый день!
Имеются таблицы:
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.
Вопрос к знатокам, как повысить производительность такого запроса ?

  Ответить  
 
 автор: cheops   (25.12.2010 в 16:25)   письмо автору
 
   для: mastergrom   (25.12.2010 в 15:57)
 

Как минимум нужно проиндексировать все ключи, которые вы используете для связи таблиц - тогда СУБД не потребуется перелапачивать таблицу по несколько раз, она воспользуется ключами, которые будут автоматически поддерживаться в отсортированном состоянии.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования