Индексировать или не индексировать

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

Следует ли мне создавать индексы для этих таблиц? Почему или почему нет?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
352
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Я думаю, вам следует рассмотреть возможность отсутствия индексов в таблице, в которую вы вставляете строки, а затем реплицировать таблицы (и, возможно, применять индексы), чтобы использовать их специально для запросов.

Ответ принят как подходящий

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

Это отличная идея, если вы не понимаете, как работает база данных. Но эти системы не являются полностью черными ящиками. Если он случайным образом поворачивает ручки, комбинации могут занять некоторое время. Сгруппированы или нет, 1 столбец или много, высокая мощность или низкая, случайные данные или упорядоченные ...

Mark Brady 08.01.2009 21:55

Как и Рэй говорит, все зависит от ситуации, и единственный способ узнать это - попробовать под нагрузкой.

С теоретической точки зрения: да, добавление индексов в таблицу замедлит вставку, потому что СУБД должна поддерживать все индексы при каждой вставке. Но вы заметите? Будет ли это иметь значение для наблюдаемой производительности? Возможно, нет. Индексы обычно хранятся в структурах B + Tree, которые могут быть вставлены за время O (log n), что неплохо, не говоря уже о кэшировании всего диска и т. д. Так что единственный способ узнать наверняка - это попробовать оба. способами и посмотрите, в чем разница.

Я не эксперт по Sql Server, но я работал со старшим инженером Microsoft над производительностью одной из наших систем. По его словам, способ, которым MSSS находит страницу для вставки новой строки, - это «сканирование свободного места» ... сканирование каждой страницы в поисках страницы с пространством для вставки строки.

Если вы добавляете в таблицу кластерный индекс, вы заставляете данные помещаться в одно конкретное место. Допустим, вы добавили в эту таблицу столбец с автонумерацией и сделали ее кластеризованным индексом. Теперь MSSS не ищет свободный блок, он знает, что 1000 ДОЛЖЕН идет сразу после 999; поэтому вместо этого он выполняет обход индекса a.

Я бы попробовал. Пробовать с 4 или 5 миллионами строк не займет много времени.

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