Другие языки программирования и технологии

MySql и бд: Что такое умышленная денормализация и в каких случаях ее уместно применять?

Олег Ермолаев
Олег Ермолаев
1 447
Умышленная денормализация нужна в тех случаях, когда её применение позволяет значительно снизить сложность запроса.
Скажем, если есть отношения 1-к-1 у трёх таблиц, и эти три таблицы очень большие, то для выборки одной "общей" записи надо делать запрос с тремя JOIN.
Оптимизировать можно делая три запроса, по одному к каждой таблице, либо применив умышленную денормализацию и сделав один простой запрос к одной таблице.

В моей практике были случаи, когда без умышленной денормализации было вообще не обойтись: MySQL и запрос с одним JOIN между двумя таблицами и условием "больше или равно" в WHERE, каждая из таблиц - несколько гигабайт. Без денормализации время исполнения запроса измерялось минутами, с ней - секундами.
Dragon Kill
Dragon Kill
216
Лучший ответ
Ко всему выше сказанному могу привести простой пример. Например, есть две таблицы users и message. Таблица users содержит данные всех пользователей, а таблица message содержит их сообщения. Можно провести денормализацию, поместив все поля из message в таблицу users. И таким образом, получится одна таблица users. Запрос к одной таблице делается быстрее, чем к нескольким. Но при этом может теряться логическая стройность базы. Поэтому к денормализации прибегают в случаях крайней необходимости при оптимизации.
Nik Name ....
Nik Name ....
3 695
дам ламерский ответ, чтобы данные быстрее получать, так как в случае нескольких таблиц либо надо делать несколько запросов, либо в запросе соединять таблицы (join). Однако в случае дублирования полей, сложнее добавлять данные, но обычно данные добавляют реже, чем пытаются получить их.

Похожие вопросы