После прочтения Вопросов и Ответов с этого сайта об индексах у меня возник вопрос.
Что делать, если использовать таблицу измерения времени с более низким уровнем детализации, являющимся днем. Куда нужно ставить индексы?
Рэнди Мелдер в вопросе: что означает «индекс» в РСУБД? сказал :
Думайте об индексе как о «оглавлении» ... это упорядоченный список указателей на позиции в файле, то есть смещения
В случае измерения времени большинство исследований данных может проводиться либо для определенного дня, конкретной недели, определенного месяца или определенного квартала, если в таблице времени хранится весь день для уникального года .
Мой вопрос: нужно ли ставить индексы для всех этих полей?
Предполагается, что день уникален, поэтому я прекрасно понимаю использование индексов. Но идентификатор недели будет иметь 7 событий , идентификатор месяца будет иметь 30/31 событий , идентификатор квартала будет иметь более или менее 120 событий .
- Стоит ли ставить индексы для этих полей?
- Это все еще будет полезно?
Я спрашиваю вас об этом, потому что в том же вопросе Дэвид Спиллетт сказал:
Конечно, добавление слишком большого количества индексов может быть плохой оптимизацией, поскольку дополнительное пространство, используемое для хранения индексов (и нагрузка ввода-вывода для их поддержания, если ваша БД видит много операций записи), может быть более серьезной проблемой, чем чуть менее оптимальные запросы чтения. так что не переусердствуйте.
Итак, каковы наилучшие соображения для случая измерения времени?
источник
Общее правило состоит в том, что чем более избирателен индекс (селективность определяется как количество уникальных значений в столбце, деленное на количество строк в таблице), тем более вероятно, что механизм будет использовать индекс, если запрос использует столбец в предложении where.
Если вы рассматриваете возможность индексации столбца, выполнение запроса, выбирающего индексированный столбец до и после и просмотр планов выполнения, покажет вам, используется ли индекс, и если да, то насколько этот индекс помогает. В идеале, запрос, который вы используете для теста, будет использоваться вашим приложением.
источник
До сих пор мое практическое правило заключалось в том, чтобы вообще не добавлять индексы в мои базы данных разработки, пока я над ними работаю. Поскольку рабочая база данных становится больше, я использую ведение журнала базы данных и
EXPLAIN
выясняю, что нужно индексировать, а затем создаю только необходимые индексы. Это прекрасно работает, если использование базы данных постепенно увеличивается, и количество индексов остается низким.При анализе данных в базе данных мне обычно нужно добавлять дополнительные индексы для ускорения запросов, которые не распространены в производстве. Я всегда делаю это на копиях производственной базы данных, поэтому эти индексы никогда не добавляются в производственную базу данных.
источник