Должен ли я объединить индексирование полиморфной ассоциации ActiveRecord?
У меня есть метрическая таблица, которую я ожидаю быть очень большой. Он имеет полиморфную ассоциацию, чтобы он мог принадлежать другим моделям, которые хотят записать некоторую метрику. Я обычно индексирую такие столбцы ассоциации, чтобы ускорить загрузку ассоциации. Я слышал, как люди говорили о совместном индексировании этой ассоциации. Это выглядит так:
add_index :comments, [:commentable_type, :commentable_id]
Но я также слышал совета против создания индексов низкой мощности, потому что выигрыш индекса не компенсировал накладные расходы поддерживая его. Так как половина моей полиморфной ассоциации, вероятно, будет иметь только 4-5 значений по миллионам строк, я склонен индексировать только часть _ip полиморфной ассоциации. Я, вероятно, создаю некоторые дополнительные совлокальные индексы, используя столбец _id и некоторые другие столбцы с нечетными целыми числами и столбцами datetime, но я также не буду включать _type в эти индексы.
Это то, что вы бы сделали/порекомендовали?
Ответы
Ответ 1
В конечном счете, это стоит провести сравнительный анализ до и после добавления индекса, на реалистичный набор данных - реалистичный по размеру и данным.
Однако вы не создаете индекс в поле с несколькими значениями. Индекс находится на комбинации двух полей, которые, вероятно, будут иметь множество комбинаций значений. Индекс комбинированных полей является умной идеей.
Ответ 2
Лучше всего сначала поставить наиболее избирательное поле при создании индекса для нескольких полей. Поскольку у вас есть только 4-5 значений commentable_type
, вам было бы лучше:
add_index :comments, [:commentable_id, :commentable_type]