Rails act_as_audited — почему он сначала индексирует по ID?

Использование Rails 2.3.5.

В act_as_audited определение схемы определяет индекс:

add_index :audits, [:auditable_id, :auditable_type], :name => 'auditable_index'

Мне кажется, что индекс должен быть:

add_index :audits, [:auditable_type, :auditable_id], :name => 'auditable_index'

В общем, в полиморфной ассоциации нам может иногда понадобиться искать только по типу, но почти никогда не искать по идентификатору без типа?

Или это ленивый способ разрешить поиск по auditable_id, когда вы используете плагин только для аудита одной таблицы?

Или есть другая причина делать индексацию таким образом?


person Thomas Andrews    schedule 04.02.2011    source источник


Ответы (1)


Ответ только что пришел мне в голову.

Некоторые базы данных не поддерживают индексирование нескольких полей, и эти базы данных будут индексировать только первое поле. Если вы выберете мою альтернативную индексацию, вы получите данные, сгруппированные по имени класса, для которых база данных должна будет выполнить последовательное сканирование, чтобы найти определенный идентификатор. Это должно быть медленнее, чем поиск идентификаторов с последующей проверкой имени класса.

Другая причина, которую я обнаружил, заключается в том, что оптимизаторы SQL, как правило, не используют индекс, когда первое поле в индексе, по-видимому, недостаточно специфично.

person Thomas Andrews    schedule 07.02.2011