$res_region = db_query ("
SELECT ".prefix."post_region.*,
(
SELECT COUNT(*)
FROM ".prefix."post_db
WHERE ".prefix."post_db.region = ".prefix."post_region.name
) AS CountReviews
FROM ".prefix."post_region
WHERE name != ''
ORDER by name ASC
");
Подскажите как можно ускорить запрос, генерация страницы занимает 34 секунды. В базе 700 тысяч записей.
Версия MySQL: 5.5.62
Вы так и не показали show create table
таблиц, поэтому попробую угадать, что там внутри.
На плане запроса видно, что подходящих индексов нет (possible_keys = NULL
). Пора добавить. На оба поля по которым идёт объединение: ".prefix."post_db.region
и ".prefix."post_region.name
.
Только не надо добавлять в индекс всю строку целиком! varchar(55)
это зло. Попробуйте для начала 5-10 первых байт. Если строки по большей части одинаковые в начале, то найдите ту границу, откуда идёт заметная разница и пусть индекс будет длиной до этой границы + чуть-чуть.
Кажется, что регионы вы уже вынесли в отдельную таблицу. Т.е. нормализовали это дело. В этом случае и объединять лучше по числовым ключам. У вас же наверняка есть первичный ключ в таблице регионов.
Само объединение (даже если оставить его по текстовым полям) лучше вынести из подзапроса переписав всё на inner join .. group by
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Проблема заключается в том, что при вызове db_add_country и db_read_country все отлично, но если после них вызвать poses, пишет такую ошибку
На dle cms пытаюсь организовать автоматическое определение города посетителя сайта
Рисую игруБоард 8*8 в нем кликаешь по одному из квадратиков (TileJPanel), в которых рисуется круг