производительность: объединение таблиц против большой таблицы с избыточными данными - PullRequest
0 голосов
/ 18 ноября 2011

Допустим, у меня есть куча продуктов. Каждый продукт имеет идентификатор, цену и длинное описание, состоящее из нескольких абзацев. У каждого продукта также будет несколько номеров sku, которые будут представлять разные размеры и цвета.

Чтобы уточнить: product_id 1 имеет 3 skus, product_id 2 имеет 5 skus. Все скусы в продукте 1 имеют одинаковую цену и описание. Продукт 2 имеет цену и описание, отличные от продукта 1. Все продукты Skus для продукта 2 делятся ценой и описанием продукта 2.

Я мог бы иметь большую таблицу с разными записями для каждого sku. Записи будут иметь избыточные поля, такие как длинное описание и цена.

Или я мог бы иметь две таблицы. Один назвал «продукты» с product_id, ценой и описанием. И один с именем "skus" с product_id, sku, цветом и размером. Затем я бы присоединился к таблицам в столбце product_id.

$query = "SELECT * FROM skus LEFT OUTER JOIN products ON skus.product_id=products.product_id WHERE color='green'";

или

$query = "SELECT * FROM master_table WHERE color='green'";

Это тупая версия моей установки. В конце будет намного больше столбцов и много продуктов. Какой метод будет иметь лучшую производительность?

Итак, чтобы быть более конкретным: допустим, я хочу НРАВИТСЯ поиск по столбцу long_description для всех skus. Я пытаюсь сравнить наличие одной таблицы с 5000 long_description и 5000 skus против OUTER, объединяющей две таблицы, одна имеет 1000 записей long_description, а другая - 5000 skus.

Ответы [ 2 ]

2 голосов
/ 18 ноября 2011

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

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

1 голос
/ 18 ноября 2011

OLTP нормализованные таблицы лучше

Присоединяйтесь к ним по запросу, упростите манипулирование данными и получите хороший ответ на короткие запросы

OLAP денормализованные таблицы лучше

Таблицы в основном не меняются и хороши для длинных запросов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...