Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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