После того, как вы сделали хорошую нормализацию, вам все еще нужно проиндексировать таблицу? Как это повлияет на производительность? Повлияет ли это на производительность после хорошей нормализации?
Какие столбцы обычно индексируются, если у вас уже есть первичный ключ и внешний ключ?
Кажется, нормализовать базу данных уже эффективно. Но я мог пропустить, как индексирование влияет на базу данных. Это эффективно только при использовании запросов? Как это работает / выполняет и делает базу данных лучше?
database
sql
indexing
normalization
Франц Ноэль
источник
источник
Ответы:
Да. На самом деле, вам вполне может потребоваться уделять больше внимания вашим индексам. Нормализация - это оптимальное хранение . Это часто расходится со скоростью поиска , поскольку используются более сложные запросы со сложными объединениями. Иногда люди, обслуживающие базы данных, для которых требуется высокая скорость поиска, могут ненормализоваться или упорядочить свои данные в несколько менее нормализованные структуры, чтобы упростить поиск.
источник
Я думаю, что вы неправильно поняли, что индексирование влияет на производительность базы данных.
Индекс помогает базе данных находить строки. Индексы - это специализированные структуры данных, которые в обмен на дополнительное дисковое пространство и некоторую производительность при вставке и обновлении помогают ядру базы данных размещаться на соответствующих строках.
Поскольку они требуют дополнительного пространства и затрат (хотя бы) производительности, чтобы поддерживать их актуальность, вы, как разработчик базы данных, должны явно создавать индексы в соответствии с вашим приложением и шаблонами запросов.
Индексы ортогональны к нормализации базы данных.
источник
Да после нормализации вам все еще нужно индексирование.
Таблицы, с которыми вы работаете, приносят такую же пользу, как и таблицы, которые вы имели до нормализации. На самом деле они сами по себе одинаковые: таблицы.
Однако следует учитывать, что индексы помогают быстрее находить данные. Нормализация структуры базы данных всегда хороша, но иногда по соображениям производительности приходится денормализовать реализацию. Но это только на индивидуальной основе.
источник
Да.
Индексы - это метод ускорения поиска данных. Некоторые запросы выполняются по первичным ключам, которые обычно неявно индексируются ядром базы данных, но другие запросы могут использовать другие столбцы. Часто некоторые запросы выполняют поиск по столбцам, которые даже не уникальны и поэтому не могут стать первичными ключами после какой-либо нормализации. Вам, вероятно, придется индексировать такие столбцы.
Есть только один способ узнать, какие индексы создать. Принимать все запросы в приложении, найти репрезентативные примеры параметров для них и есть ядро базы данных показывают свои планы запросов (все базы данных система имеет
EXPLAIN
,EXPLAIN QUERY PLAN
или аналогичную команду, она называется по- разному в разных системах) и тест , как долго они принимают. Чем создавать индексы, которые ускоряют те, которые были медленными. И не забудьте снова отбросить индексы, которые вы пытались, но не помогли избежать напрасной траты ресурсов.источник
Индексы обычно нужны во всех таблицах, кроме самых маленьких. Практически каждый внешний ключ должен быть проиндексирован, и простая настройка FK не означает, что у вас есть индекс (по крайней мере, не в некоторых базах данных, смотрите документацию по БД). Поля, к которым вы часто присоединяетесь или используете, где должны быть проиндексированы предложения, если они являются полезными (вам нужно определенное количество переменных в данных, чтобы булевы значения не принесли выгоды, например), и те, где можно индексировать.
Однако каждый индекс замедляет операции вставки \ обновления \ удаления при ускорении выбора, поэтому тщательно выбирайте свои индексы.
Индексы имеют решающее значение для приемлемой производительности в базе данных.
источник
Для третьей нормальной формы вам обязательно понадобятся индексы для всех первичных ключей.
Нужны ли вам какие-либо другие индексы, зависит от того, как используется ваша база данных. Например, если вы регулярно выполняете поиск клиентов по определенному почтовому индексу, то, возможно, было бы неплохо проиндексировать столбец zip_code в таблице клиентов.
источник