Я читал о рефакторинге большого медленного SQL-запроса поверх здесь, и на данный момент самый высокий ответ пришел от Митча Уита, который хочет убедиться, что запрос использует индексы для основных выборок, и упоминает:
First thing I would do is check to make sure there is an active index maintenance job being run periodically. If not, get all existing indexs rebuilt or if not possible at least get statistics updated.
Я всего лишь администратор базы данных-любитель, и я сделал несколько программ-фрилансеров, которые в основном представляют собой настольные клиенты Java, а иногда и серверную часть MySQL. Когда я настраиваю систему, я знаю, что нужно создать индекс для столбцов, которые будут запрашивать, есть varchar CaseID и varchar CustName.
Однако я установил эту систему несколько месяцев назад и оставил ее управлять клиентом, и я считаю, что индексы должны расти по мере ввода данных, и я считаю, что все по-прежнему работает нормально. Однако меня беспокоит, что индексы нужно периодически перестраивать, потому что сегодня я прочитал, что должна быть «работа по активному обслуживанию». Единственное техническое обслуживание, которое я поставил на это устройство, - это еженощное резервное копирование.
Я хотел спросить сообщество о регулярном обслуживании, которое может потребоваться для базы данных. Нужно ли перестраивать индексы? Могу ли я доверять бэкэнду MySQL, чтобы он продолжал работать до тех пор, пока никто не вмешивается в его работу и данные остаются меньше нескольких гигабайт?






Обычно рекомендуется настроить задание cron для оптимизации индексов и проверки ошибок.
См. mysqlcheck. Типичное задание cron выглядит примерно как mysqlcheck -Aaos, которое проверяет все таблицы во всех базах данных на наличие ошибок, оптимизирует индексы и выводит данные только при ошибках.
Тогда честно? Я бы не стал беспокоиться.
Нет необходимости «перестраивать» индекс. Они всегда обновляются. Возможно, он имел в виду перестройку стола. В зависимости от ваших шаблонов использования и схемы вы можете получить фрагментированные страницы в InnoDB, и я думаю, что и в MyISAM. Перестройка таблицы может улучшить производительность, избавившись от фрагментации данных на диске. Я не использую таблицы MyISAM регулярно, но считаю, что рекомендуется запускать «OPTIMIZE TABLE» с определенными шаблонами использования. См. Документацию MySQL на ОПТИМИЗАЦИЯ ТАБЛИЦЫ для получения полезной информации о MyISAM и InnoDB.
Я не так хорошо знаком с тонкостями MyISAM, но с InnoDB статистика может устареть. База данных хранит оценочную статистику о том, как ваши данные распределяются для данного индекса, и они могут устареть, но MySQL / InnoDB имеет некоторые встроенные функции, позволяющие поддерживать актуальность статистики. Обычно вам не о чем беспокоиться.
Итак, если вы используете InnoDB, ответ отрицательный, вам обычно не нужно ничего активно делать, чтобы ваши индексы работали хорошо. Я не так уверен в MyISAM, я думаю, что чаще нужно регулярно оптимизировать эти таблицы.
Из вашей ссылки: «OPTIMIZE TABLE следует использовать, если вы удалили большую часть таблицы или если вы внесли много изменений в таблицу со строками переменной длины» Похоже, мне следует запускать OPTIMIZE, только если были значительные структурные изменения. Спасибо, похоже, мне не нужно.
Ответ, на который вы связались о «регулярном обслуживании», относился к конкретному контексту временной таблицы, которая регулярно усекается и заполняется заново. Вам не нужно делать это для подавляющего большинства установок баз данных MySQL.
У меня нет доступа к машине, чтобы не беспокоить клиента и не пугать его, заставляя думать, что это может быть проблема. Я знаю схему использования и ищу информацию о том, когда нужна оптимизация.