Из моего собственного исследования (но я не эксперт DBA) я узнал, что есть две вещи, которые следует учитывать при определении порядка составного индекса ключа.
Во-первых, относительно количества столбцов,Индекс вообще лучше при поиске столбцов с высокой кардинальностью.Поэтому я был бы склонен поместить столбец с наибольшим количеством элементов первым в индексе.Для справки есть статья под названием MySQL Query Optimization , в которой говорится:
Индексы лучше всего работают для столбцов, которые имеют большую мощность по сравнению с количеством строк в таблице (то есть(столбцы, которые имеют много уникальных значений и мало дубликатов).
В вашем случае столбцы _id
явно бы лучше соответствовали этому определению, поэтому они являются лучшим кандидатом на префиксkey.
Еще одна вещь, которую следует учитывать, - это возможность многократного использования этих индексов.Большинство (если не все) систем баз данных допускают повторное использование префикса составного ключа.Например, составной ключ на (owner_id, owner_type)
может также использоваться запросами на owner_id
, но не на owner_type
.
Так что из того, что вы объяснили в своем вопросе, вам может быть лучше с двумя индексами: индекс составного ключа на (owner_id, owner_type)
и другой на (owner_type)
.
Наконец, это действительно всесводится к вашему набору данных и запросов.Попробуйте несколько сценариев, тестов производительности с использованием различных составных ключей, чтобы увидеть, какое решение является наиболее оптимальным.Кроме того, не забывайте, что индексы влекут за собой штрафы за запись в ваших таблицах.
Обновление : Там также есть еще один довольно популярный вопрос SO об индексе составного ключа:
Когда я должен использовать составной индекс?