Как получить список таблиц и полей без индекса (mysql), по которым происходит выбор?
Привет.
Суть вопроса: есть магазин на openCart, который использует бд, в которой крайней степени бардак в плане оптимизации производительности.
200+ таблиц, в которых часто даже нет primary key, не говоря уже про индексы.
Требуется ускорить работу сайта, поэтому я решил оптимизировать бд, а именно расставить индексы на полях, по которым происходит выборка данных.
Оптимистично я включил логирование медленных запросов без индекса - вывалилось порядка 140 запросов длиной с экватор и такой же глубиной вложенных подзапросов.
Сидеть разбирать вручную каждый запрос или через explain как-то наверно не совсем правильно, а точнее долго...
Возможно есть какие-то инструменты, которые могут как-то упростить это всё дело?
Что-то типа, закидываешь файл со списком запросов и получаешь список таблиц и полей по которым происходит выбор данных (пусть даже всех, без учёта наличия индекса).
ChairfaceChippendale, честно говоря, после того как после обновлений 3 ключевых страниц в general_log вывалилось несколько тысяч запросов я туда даже не заглядывал.
Тут бы slow_query_log обработать как-то.
А там можно что-то увидеть, что может быть полезным в решении моего вопроса?))
Сидеть разбирать вручную каждый запрос через explain - именно так это и делается.
Потому что само по себе механические впиливание индекса не решает вообще ничего.
Оптимизация запроса - это далеко совсем не только "создать индекс на поле, по которому идёт выборка"
Потому что этот индекс может не сработать
Потому что может быть нужен совсем другой индекс.
Потому что избыточные индексы могу наоборот замедлить приложение.