[Помогите] Индексы для БД

Тема в разделе "OpenCart", создана пользователем cereberlum, 22 дек 2013.

  1. cereberlum

    cereberlum

    Регистрация:
    26 май 2013
    Сообщения:
    740
    Симпатии:
    266
    Кто-нибудь пробовал использовать индексы БД для улучшения производительности системы? Поделись опытом, как включить хотя бы один индекс, в сети натыкался только на общую информацию, а хотелось бы все-таки понять как применять на практике.
     
  2. halfhope

    halfhope

    Регистрация:
    31 дек 2012
    Сообщения:
    285
    Симпатии:
    312
    На практике mysql сервер будет индексировать записи таблиц по этим индексам. Помогает, если очень много товаров.
    Вот решение:
    Код:
    ALTER TABLE `category` ADD INDEX ( `parent_id` ) ;
    ALTER TABLE `category` ADD INDEX ( `top` ) ;
    ALTER TABLE `category` ADD INDEX ( `sort_order` ) ;
    ALTER TABLE `category` ADD INDEX ( `status` ) ;
    ALTER TABLE `category_description` ADD INDEX ( `language_id` ) ;
    ALTER TABLE `category_to_store` ADD INDEX ( `store_id` ) ;
    ALTER TABLE `option` ADD INDEX ( `sort_order` ) ;
    ALTER TABLE `option_description` ADD INDEX ( `name` ) ;
    ALTER TABLE `option_value` ADD INDEX ( `option_id` ) ;
    ALTER TABLE `option_value_description` ADD INDEX ( `option_id` ) ;
    ALTER TABLE `order` ADD INDEX ( `customer_id` ) ;
    ALTER TABLE `product` ADD UNIQUE INDEX ( `product_id` ) ;
    ALTER TABLE `product` ADD INDEX ( `model` ) ;
    ALTER TABLE `product` ADD INDEX ( `sku` ) ;
    ALTER TABLE `product` ADD INDEX ( `upc` ) ;
    ALTER TABLE `product` ADD INDEX ( `manufacturer_id` ) ;
    ALTER TABLE `product` ADD INDEX ( `sort_order` ) ;
    ALTER TABLE `product` ADD INDEX ( `status` ) ;
    ALTER TABLE `product` ADD INDEX ( `date_available` ) ;
    ALTER TABLE `product_option` ADD INDEX ( `option_id` ) ;
    ALTER TABLE `product_option_value` ADD INDEX ( `product_option_id` ) ;
    ALTER TABLE `product_option_value` ADD INDEX ( `product_id` ) ;
    ALTER TABLE `product_option_value` ADD INDEX ( `option_id` ) ;
    ALTER TABLE `product_option_value` ADD INDEX ( `option_value_id` ) ;
    ALTER TABLE `product_tag` ADD INDEX ( `product_id` ) ;
    ALTER TABLE `product_tag` ADD INDEX ( `tag` ) ;
    ALTER TABLE `url_alias` ADD INDEX ( `query` ) ;
    ALTER TABLE `url_alias` ADD INDEX ( `keyword` ) ;
    ALTER TABLE `user` ADD INDEX ( `username` ) ;
    ALTER TABLE `user` ADD INDEX ( `password` ) ;
    ALTER TABLE `user` ADD INDEX ( `email` ) ;
    
    Не забудьте добавить префиксы к названиям таблиц.
     
    HPlus и cereberlum нравится это.
  3. cereberlum

    cereberlum

    Регистрация:
    26 май 2013
    Сообщения:
    740
    Симпатии:
    266
    Т.е. достаточно добавить индексы в таблицу и все? Дальше сервер сам разберется что с ними делать?
     
  4. halfhope

    halfhope

    Регистрация:
    31 дек 2012
    Сообщения:
    285
    Симпатии:
    312
    да. Да, запросы в OpenCart уже используют эти поля и нам остается их только проиндексировать. Если бы писали новые запросы, пришлось бы составлять их с учетом индексов.
     
    HPlus и cereberlum нравится это.