Все добрый день, подскажите как правильно построить индексы вернее главное не перестараться с их расстановкой. К примеру есть таблица по которым идет много объединений юзер, тип, город стоит ли проставлять по всем этим полям индексы ? CREATE TABLE `crm_bank` ( `bank_id` INT(11) NOT NULL AUTO_INCREMENT, `bank_user_id` INT(11) NOT NULL DEFAULT '0', `bank_type` INT(11) NOT NULL DEFAULT '0', `bank_paysystem` INT(11) NOT NULL DEFAULT '0', `bank_city` INT(11) NOT NULL DEFAULT '0', `bank_date` DATETIME NULL DEFAULT NULL, `bank_way` TINYINT(1) NOT NULL DEFAULT '0', `bank_summ` FLOAT NOT NULL DEFAULT '0', `bank_comment` VARCHAR(255) NULL DEFAULT NULL, `bank_confirmed` INT(11) NOT NULL DEFAULT '0', `bank_order` INT(11) NULL DEFAULT NULL, `bank_confirmed_by` INT(11) NULL DEFAULT NULL, PRIMARY KEY (`bank_id`) ) COLLATE='utf8_general_ci' ENGINE=InnoDB;
1. Берем slow log 2. Делаем explain analyze 3. Курим и добавляем индексы до появления приемлемого результата. Создание правильных индексов без знания запросов и их количества - гадание на кофейной гуще, ну или неплохой такой скилл )
Это пока не глянешь на статистику использования индексов и сами запросы. Там и окажется, что планировщик делает запрос с другого конца ))
вообщем поделюсь как я поступил , проставил индексы на связующие таблицы где как мне показалось больше всего нагрузка с индексами лучше не увлекаться кроме связующих таблиц рекомендовано использовать индексы на полях где часто происходит поиск по where в моем случае у меня и связи по этим полям + есть where, так как у меня таблиц было много эта таблица как пример , после оптимизации сайт скорость сайта увеличилась в 2-3 раза `bank_user_id` INT(11) NOT NULL DEFAULT '0', `bank_paysystem` INT(11) NOT NULL DEFAULT '0', `bank_city` INT(11) NOT NULL DEFAULT '0', `bank_order` INT(11) NULL DEFAULT NULL,
хех, ну раз хотите конкретики, начните, к примеру, с этого: https://habrahabr.ru/company/postgrespro/blog/326096/