Ответ 1
Вы сравниваете составной индекс с набором независимых индексов. Они просто разные.
Подумайте об этом так: составной индекс дает быстрый поиск первого поля во вложенном наборе полей, за которым следует быстрый поиск второго поля внутри ТОЛЬКО записей, уже выбранных первым полем, после чего путем быстрого поиска третьего поля - опять же, только в пределах записей, выбранных предыдущими двумя индексами.
Давайте возьмем пример. Ваш механизм базы данных займет не более 20 шагов, чтобы найти уникальное значение в 1000 000 записей (если используется память) , если используется индекс. Это верно, если вы используете составной или независимый индекс, но ТОЛЬКО для первого поля ( "вид" в вашем примере, хотя я бы подумал, что вам нужны Семья, Виды, а затем Общее имя).
Теперь скажем, что для этого первого значения поля имеется 100 000 совпадающих записей. Если у вас есть только отдельные индексы, тогда любой поиск в этих записях займет 100 000 шагов: по одной для каждой записи, полученной первым индексом. Это связано с тем, что второй индекс не будет использоваться (в большинстве баз данных - это немного упрощение), и необходимо использовать соответствие грубой силы.
Если у вас есть составной индекс, ваш поиск выполняется намного быстрее, потому что ваш второй поиск по полю будет иметь индекс в пределах первого набора значений. В этом случае вам понадобится не более 17 шагов, чтобы получить первое совпадающее значение в поле 2 в пределах 100 000 совпадений в поле 1 (база данных 2 из 100 000).
Итак: шаги, необходимые для поиска уникальной записи из базы данных из 1 000 000 записей с использованием составного индекса по 3 вложенным полям, где первый извлекает 100 000, а второй извлекает 10 000 = 20 + 17 + 14 = 51 шаг.
Шаги, необходимые при тех же условиях, что и только независимые индексы = 20 + 100 000 + 10000 = 110 020 шагов.
Большая разница, а??
Теперь не держите орехи, добавляя составные индексы повсюду. Во-первых, они дорого стоят на вставках и обновлениях. Во-вторых, они приводятся только в том случае, если вы действительно выполняете поиск по вложенным данным (для другого примера я использую их, когда вы извлекаете данные для входа для клиента в течение заданного диапазона дат). Кроме того, они не стоят того, если вы работаете с относительно небольшими наборами данных.
Наконец, проверьте документацию по базе данных. Базы данных стали чрезвычайно сложными в способности развертывать индексы в наши дни, и описанный выше сценарий базы данных 101 может не выполняться для некоторых (хотя я всегда развивается так, как будто это происходит именно так, я знаю, что я получаю).