Должен ли я объединить индексирование полиморфной ассоциации 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]