BonBonSlick
@BonBonSlick
Web Developer Trainee

Преимущества и недостатки индексированных связей или когда их использовать?

https://www.doctrine-project.org/projects/doctrine...

Собственно, если есть уникальное поле, то можно работать с индексированными связями.
В теории это долно ускорить выборку т.к. поиск по коллекции будет всегда O(1)
Но т.к. каждая сущность имеет свой уникальный UUID, стоит ли индексировать вообще все связи или есть конкретные случаи где это действительно необходимо?
  • Вопрос задан
  • 60 просмотров
Решения вопроса 1
maksim92
@maksim92
Нашёл решение — пометь вопрос ответом!
Все зависит от того, когда и где это вы используете.

1. Если вы используете для чтения данных на фронтенд, в отчетах и тому подобное, то лучше это всё делать чуть ли не на простых SQL запросах. Тогда и до индексов доктрины может не дойти. Чтобы не писать все запросы в SQL формате можно пользоваться QueryBuilder от доктрины.

2. Если же вы пытаетесь оптимизировать это всё для модифицирования (создание, удаление, редактирование), то это, в принципе, не особо требуется.

Таким образом мы приходим к использованию паттерна CQRS и разделяем наш код и репозитории на Чтение и Модифицирование. Такое разделение позволяет существенно ускорить запросы на чтения, так так данные не будут маппиться на объекты, а будут возвращаться простыми массивами. Так же мы сделаем на код лучше из-за удаление ненужных гетеров и связей, которые используются только для Чтения. Ну и если идти совсем дальше мы можем отдельно применить к Чтению кэширование и избавим нашу систему от ненужной нагрузки.

Что касается именно индексов...

Этот параметр используется для создания индексированной ассоциации в вашей сущности (на уровне PHP). На самом деле это не влияет на схему БД.

Если вы хотите легко получить элемент из коллекции (например, менеджеры), вы можете захотеть, чтобы доктрина отображала ваших менеджеров таким образом, чтобы некоторое значение каждого менеджера было ключом в массиве (на самом деле ArrayIterator), чтобы вы могли получить его как $this->менеджеры[$someId].

Без этого вам пришлось бы перебирать всю коллекцию, чтобы найти менеджера с определенным идентификатором.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
firedragon
@firedragon
Senior .NET developer
Индексы занимают место и увеличивают время на вставке. Думайте пробуйте разные варианты
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы