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

Я читал о рефакторинге большого медленного 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, чтобы он продолжал работать до тех пор, пока никто не вмешивается в его работу и данные остаются меньше нескольких гигабайт?

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
26
0
48 379
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

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

Karl 26.11.2008 22:22

Тогда честно? Я бы не стал беспокоиться.

Eli 27.11.2008 03:11
Ответ принят как подходящий

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

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

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

Из вашей ссылки: «OPTIMIZE TABLE следует использовать, если вы удалили большую часть таблицы или если вы внесли много изменений в таблицу со строками переменной длины» Похоже, мне следует запускать OPTIMIZE, только если были значительные структурные изменения. Спасибо, похоже, мне не нужно.

Karl 26.11.2008 22:30

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

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