Красота ORM убаюкивала меня снотворным. У меня есть существующее приложение Django с отсутствием индексов базы данных. Есть ли способ автоматически создать список столбцов, нуждающихся в индексировании?
Я подумал, может быть, какое-то промежуточное программное обеспечение, которое регистрирует, какие столбцы участвуют в предложениях WHERE? но есть ли что-нибудь встроенное в MySQL, что могло бы помочь?






Да, есть.
Если вы посмотрите на журнал медленных запросов, там есть вариант --log-queries-not-using-indexes
Вышеупомянутое промежуточное ПО будет отображать только столбцы, которые являются кандидатами в индексы, в то время как журнал медленных запросов покажет вам фактические предложения (которые могут отличаться из-за оптимизации сервера, специфичной для MySQL).
Нет.
Добавление индексов ко всем «медленным» запросам волей-неволей также замедлит вставку, обновление и удаление.
Индексы - это баланс между быстрыми запросами и быстрыми изменениями. Нет общего или «правильного» ответа. Конечно, нет ничего, что могло бы это автоматизировать.
Вы должны измерить улучшение всего вашего приложения по мере добавления и изменения индексов.
В моем случае, как и во многих веб-приложениях, он требует большого количества операций чтения - записи выполняются только администратором, а размер таблицы довольно мал. Согласны ли вы в этом случае, что добавление индексов ко всем столбцам, используемым при поиске, было бы полезным?
@andybak: Индексирование Willy-Nilly - плохой план. Некоторые индексы могут показаться хорошей идеей, но должны принести реальную пользу. Два правила: (1) Меняйте что-то одно за раз; (2) Измерьте до и после. Никогда не расстреливайте кучу изменений и надежду.
Жаль, что нет сообщения о более общем решении, таком как упомянутое промежуточное ПО.