Когда следует перестраивать индексы базы данных?

StackOverflow https://stackoverflow.com/questions/321461

  •  11-07-2019
  •  | 
  •  

Вопрос

Я читал о рефакторинге большого медленного SQL-запроса через здесь и о текущем максимуме Ответ от Mitch Wheat, который хочет убедиться, что запрос использует индексы для основных выборок, и упоминает:

  

Первое, что я хотел бы сделать, - это убедиться, что периодически выполняется задание обслуживания активного индекса. Если нет, перестройте все существующие индексы или, по возможности, обновите статистику.

Я только начинающий администратор баз данных, и я сделал несколько внештатных программ, которые в основном являются настольными клиентами Java, а иногда и бэкэндом MySQL. Когда я настраиваю систему, я знаю, что нужно создать индекс для столбцов, к которым будет выполняться запрос, есть varchar CaseID и varchar CustName.

Однако я настроил эту систему несколько месяцев назад и оставил клиент, управляющий ею, и я считаю, что индексы должны расти по мере ввода данных, и я считаю, что все по-прежнему работает хорошо. Я обеспокоен тем, что индексы должны периодически перестраиваться, потому что сегодня я прочитал, что должна быть «активная работа по обслуживанию». Единственная работа по техническому обслуживанию, которую я поставил, была ночная резервная копия.

Я хотел спросить сообщество о регулярном обслуживании базы данных. Нужно ли перестраивать индексы? Могу ли я доверять, чтобы серверная часть MySQL продолжала работать до тех пор, пока с ней никто не связывался, а объем данных не превышал нескольких гигабайт?

Это было полезно?

Решение

Нет необходимости «перестраивать» индекс. Они всегда в курсе. Может быть, он имел в виду восстановление таблицы. В зависимости от ваших шаблонов использования и схемы, вы можете получить фрагментированные страницы в InnoDB, и я думаю, в MyISAM. Восстановление таблицы может повысить производительность, избавившись от фрагментации ваших данных на диске. Я не использую таблицы MyISAM регулярно, но я считаю, что рекомендуется запускать «OPTIMIZE TABLE» с определенными шаблонами использования. См. Документацию MySQL на OPTIMIZE TABLE для получения полезной информации. на MyISAM и InnoDB.

Я не так хорошо знаком со сложностями MyISAM, но с InnoDB это правда, что статистика может устареть. База данных хранит приблизительную статистику о том, как ваши данные распределяются по заданному индексу, и они могут быть устаревшими, но MySQL / InnoDB имеет некоторые встроенные функциональные возможности, чтобы поддерживать статистику в актуальном состоянии. Вам обычно не нужно беспокоиться об этом.

Так что, если вы используете InnoDB, ответ - нет, обычно вам не нужно активно что-либо делать, чтобы ваши индексы работали хорошо. Я не так уверен с MyISAM, я думаю, что чаще нужно регулярно оптимизировать эти таблицы.

Другие советы

Обычно рекомендуется настроить cronjob для оптимизации индексов и проверки на наличие ошибок.

См. mysqlcheck . Типичное задание cron выглядит примерно так: mysqlcheck -Aaos , которое проверяет все таблицы во всех базах данных на наличие ошибок, оптимизирует индексы и выводит только ошибки.

Ответ, на который вы ссылались о "регулярном обслуживании" находился в определенном контексте временной таблицы, которая регулярно усекается и заполняется. Вам не нужно делать это для подавляющего большинства установок баз данных MySQL.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top