Есть сайт.
Предыдуший разраб был алхимиком и превратил базу в кучу мусора.
В баз есть одна вьюшка, самая важная для работы сайта.
В простое сервера вьющка отрабатывает 2 секунды на любом количестве данных (limit 1 или where id = 1).
Слив базу на локалку я получил время исполнения на limit 1 в ~40ms на всех данных вьющки в ~118ms.
Вьюшка написана мягко говоря отвратительно, но когда понимаешь какая у базы структура все становиться ясно.
Это список таблиц. Снизу подчеркнул вьющку, а сверху все таблицы которые она использует.
Код вьющки:
create or replace definer = kipyatcom@localhost view if not exists aws2_albums as select `kipyatcom`.`aws2_classifier_items`.`id` AS `id`,
`kipyatcom`.`aws2_classifier_items`.`classifier_id` AS `classifier_id`,
`kipyatcom`.`aws2_classifier_items`.`title` AS `title`,
`kipyatcom`.`aws2_classifier_items`.`is_visible` AS `is_visible`,
`kipyatcom`.`aws2_classifier_items`.`order` AS `order`,
`kipyatcom`.`aws2_classifier_items`.`created_at` AS `created_at`,
`kipyatcom`.`aws2_classifier_items`.`updated_at` AS `updated_at`,
(select `kipyatcom`.`aws2_classifier_fields_values`.`value`
from `kipyatcom`.`aws2_classifier_fields_values`
where
`kipyatcom`.`aws2_classifier_fields_values`.`classifier_item_id` = `kipyatcom`.`aws2_classifier_items`.`id`
and `kipyatcom`.`aws2_classifier_fields_values`.`classifier_field_id` =
(select `kipyatcom`.`aws2_classifier_fields`.`id`
from `kipyatcom`.`aws2_classifier_fields`
where `kipyatcom`.`aws2_classifier_fields`.`name` = 'city'
and `kipyatcom`.`aws2_classifier_fields`.`classifier_id` = 3)
and `kipyatcom`.`aws2_classifier_items`.`classifier_id` = 3) AS `city`,
(select str_to_date(`kipyatcom`.`aws2_classifier_fields_values`.`value`, '%d.%m.%Y %H:%i')
from `kipyatcom`.`aws2_classifier_fields_values`
where
`kipyatcom`.`aws2_classifier_fields_values`.`classifier_item_id` = `kipyatcom`.`aws2_classifier_items`.`id`
and `kipyatcom`.`aws2_classifier_fields_values`.`classifier_field_id` =
(select `kipyatcom`.`aws2_classifier_fields`.`id`
from `kipyatcom`.`aws2_classifier_fields`
where `kipyatcom`.`aws2_classifier_fields`.`name` = 'date'
and `kipyatcom`.`aws2_classifier_fields`.`classifier_id` = 3)
and `kipyatcom`.`aws2_classifier_items`.`classifier_id` = 3) AS `date`,
...
(select `kipyatcom`.`aws2_classifier_fields_values`.`value`
from `kipyatcom`.`aws2_classifier_fields_values`
where
`kipyatcom`.`aws2_classifier_fields_values`.`classifier_item_id` = `kipyatcom`.`aws2_classifier_items`.`id`
and `kipyatcom`.`aws2_classifier_fields_values`.`classifier_field_id` =
(select `kipyatcom`.`aws2_classifier_fields`.`id`
from `kipyatcom`.`aws2_classifier_fields`
where `kipyatcom`.`aws2_classifier_fields`.`name` = 'photograph'
and `kipyatcom`.`aws2_classifier_fields`.`classifier_id` = 3)
and `kipyatcom`.`aws2_classifier_items`.`classifier_id` = 3) AS `photograph`,
from `kipyatcom`.`aws2_classifier_items`
where `kipyatcom`.`aws2_classifier_items`.`classifier_id` = 3;
Название сайта затирать не стал, пусть все знают, как там все через жопу.
Как это можно ускорить или что с этим можно сделать?