Нужно ли индексирование после нормализации базы данных?


14

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

Какие столбцы обычно индексируются, если у вас уже есть первичный ключ и внешний ключ?

Кажется, нормализовать базу данных уже эффективно. Но я мог пропустить, как индексирование влияет на базу данных. Это эффективно только при использовании запросов? Как это работает / выполняет и делает базу данных лучше?


5
Какие столбцы обычно индексируются, если у вас уже есть первичный ключ и внешний ключ? Сроки. Имена. Все, что вам может понадобиться для поиска или сортировки.
Carson63000

Индекс по первичному ключу не считается?
CodesInChaos

Ответы:


34

Да. На самом деле, вам вполне может потребоваться уделять больше внимания вашим индексам. Нормализация - это оптимальное хранение . Это часто расходится со скоростью поиска , поскольку используются более сложные запросы со сложными объединениями. Иногда люди, обслуживающие базы данных, для которых требуется высокая скорость поиска, могут ненормализоваться или упорядочить свои данные в несколько менее нормализованные структуры, чтобы упростить поиск.


21
Целью нормализации является не эффективность хранения, а удаление зависимостей от вставки, обновления и удаления. Дальнейшее чтение

4
Я согласен с @MichealT, что дело не в эффективности. Логическая последовательность была тем, что я получил по ссылке.
JeffO

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

56

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

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

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

Индексы ортогональны к нормализации базы данных.


4

Да после нормализации вам все еще нужно индексирование.

Таблицы, с которыми вы работаете, приносят такую ​​же пользу, как и таблицы, которые вы имели до нормализации. На самом деле они сами по себе одинаковые: таблицы.

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


2

Да.

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

Есть только один способ узнать, какие индексы создать. Принимать все запросы в приложении, найти репрезентативные примеры параметров для них и есть ядро базы данных показывают свои планы запросов (все базы данных система имеет EXPLAIN, EXPLAIN QUERY PLANили аналогичную команду, она называется по- разному в разных системах) и тест , как долго они принимают. Чем создавать индексы, которые ускоряют те, которые были медленными. И не забудьте снова отбросить индексы, которые вы пытались, но не помогли избежать напрасной траты ресурсов.


1

Индексы обычно нужны во всех таблицах, кроме самых маленьких. Практически каждый внешний ключ должен быть проиндексирован, и простая настройка FK не означает, что у вас есть индекс (по крайней мере, не в некоторых базах данных, смотрите документацию по БД). Поля, к которым вы часто присоединяетесь или используете, где должны быть проиндексированы предложения, если они являются полезными (вам нужно определенное количество переменных в данных, чтобы булевы значения не принесли выгоды, например), и те, где можно индексировать.

Однако каждый индекс замедляет операции вставки \ обновления \ удаления при ускорении выбора, поэтому тщательно выбирайте свои индексы.

Индексы имеют решающее значение для приемлемой производительности в базе данных.


0

Для третьей нормальной формы вам обязательно понадобятся индексы для всех первичных ключей.

Нужны ли вам какие-либо другие индексы, зависит от того, как используется ваша база данных. Например, если вы регулярно выполняете поиск клиентов по определенному почтовому индексу, то, возможно, было бы неплохо проиндексировать столбец zip_code в таблице клиентов.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.