Задать вопрос
@PHPjedi

Стоит ли добавлять index для полей таблицы EAV?

У меня в данный момент простой e-commerce проект. Реализованы EAV таблицы для характеристики товаров. Всё довольно просто:

product_attribute_values
- product_id (index)
- value
- product_attribue_data_id (index)

product_attribute_data
- slug (memory)
- display_name (объём памяти)

Нужно ли добавлять индексы тем полям, которые будут использованы для фильтрации?
Это может быть поле value в product_attribute_values, также поле slug в product_attribute_data, а возможно в некоторых местах и поле display_name.

Каждый из вышеупомянутых полей имеет тип varchar (255).

Товаров будет около 10,000. Спецификаций к ним в среднем по 20 записей. Это получается что по идее, записей будет меньше одного миллиона.

Дополнительный вопрос касательно индексов: Нужно ли добавлять индексы в полиморфную таблицу?
  • Вопрос задан
  • 141 просмотр
Подписаться 1 Простой 5 комментариев
Решения вопроса 2
@rPman
Если нужны сложные индексы, то в EAV модели появляется дополнительная таблица объектов с выделенными полями под нужные атрибуты, наполняемая тригерами, и уже на них настраиваются индексы.

Скажи, зачем ты выбрал EAV модель? Зачем создал себе проблем?

В чем проблема каждому атрибуту создать колонку в таблице, сотни колонок никаких особых проблем (главная рекомендация - не делать default value, если в будущем понадобится удалять добавлять колонки), структура отлично кодом модифицируется и анализируется средствами базы данных, и главное гибко организуются многоуровневые индексы, что сложно реализовать на EAV
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Стоит ли добавлять index для полей таблицы EAV?

Добавляй конешно. Если ты уже докатился до такого состояния что затащил EAV.
Но это - вопрос не к Qna а к тебе. Ни один архитектор не умеет прогнозировать время
исполнения запроса. Это - слишком шумящая и слишном сложная формула. А знать ее можешь
только ты сам после нагрузочного тестирования. Загрузи фейковые данные. Смоделируй без индекса
и с индексом.

Ну... по возможности подумай о том чтоб как-то уйти от EAV и заменить характеристики
товара JSON-документом.
Это - эволюционный путь и все к этому приходят.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@PHPjedi Автор вопроса
rPman mayton2019 Спасибо Вам больше за подсказку, за ответы. Прочитал также статьи у англоязычных разработчиков, убедился в том, что от EAV откажусь, но это уже в будущих проектах. Дайте совет, что на сегодняшний день является лучшим решением для хранения Attribute и Attribute Value значений, записей?

Также отвечу почему я не выбрал JSON тип данных. Это из-за сложности фильтраций. Советуясь с коллегами, я убедился, что EAV это хорошее решение. Возможно так оно и есть, так как у меня не 5,000,000 плюс записей.

Если имели опыт работы с сервисами типа Algolia, ElascticSearch и MeiliSearch, что думаете об этих сервисах? Поделитесь профессиональным опытом, мне будет очень интересно прочитать ваше мнение и ваш опыт.

Спасибо!
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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