2013-07-04 4 views
0

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

Сначала предыстория:

У нас есть продукты, и каждый продукт имеет путь категории (например, аксессуары-обувь-кроссовки)

Я хочу соединить свою продукцию с соответствующими категориями в то время как держать вещи совместимые с правилами 3NF.

я могу идти об этих двух способов, я мог бы:

  1. Иметь отношения многие ко многим между продуктами и категориями (взорвав путь категории на отдельные категории и формирование объединения в многих к многие таблицы)

    Плюсы:
    Простой и понятный.

    Против:
    Ассоциация многих-многих производителей экспоненциально растет! Вы можете себе представить, почему каждый продукт имеет несколько категорий, а в тестовом случае задействовано всего 250 000 продуктов. Я могу интуитивно понять, что по мере увеличения размера ввода напряжение на движке баз данных будет увеличиваться.

  2. Создайте отношения между многими категориями между категориями и продуктами, а также многие отношения многих категорий между категориями и действительными категориями. Это имеет смысл для меня, так как пути категорий в тестовом примере из 250 000 продуктов ограничены 13 000 уникальными экземплярами, и эти пути, связанные с их фактическими категориями в другом отношении от многих до многих, не превышают более 61 000 строк.

    За:
    Гораздо меньше категории ассоциации для базы данных к быстрому пути (61,000 ассоциации по сравнению с 900000 ассоциаций, образованных в первом способе)

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

Какой из этих технологий вы считаете наиболее подходящей? Мне нужны FAST retrievals, поэтому операторы быстрого выбора должны быть основными критериями.

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

ответ

0

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

Простая математика на самом деле. Мораль истории: поддерживайте таблицу словарей (Category_Path) вместе с ее определениями (категориями). Соедините таблицу словарей с каждым из соответствующих элементов (Продукты) с помощью внешнего ключа. Гораздо меньше рядов делает всех счастливыми :)

Смежные вопросы