2009-11-25 2 views
3

У меня есть отдельные индексы на, скажем, столбцах A, B и C. Я бы хотел создать составной индекс для трех столбцов A + B + C.Может ли создание индекса использовать существующие индексы?

Какое влияние окажут мои индексы на составной индекс создание? Будет ли база данных использовать их, неужели они неактуальны или замедлят создание моего нового составного индекса?

Я использую MySql 5.1.

EDIT: BTW В таблице имеется несколько миллионов строк.

EDIT 2: благодаря tster по предложению: Я попробовал это на гораздо меньший столе (правда, всего 20 000 строк), но даже в этом случае создание нового составного индекса заняло заметно больше, когда отдельные показатели были уже настоящее время.

+0

iirc, MySQL использует только один индекс. Я бы сам создал покрывающий/составной индекс и избавился от отдельных –

+0

@OMGPonies: спасибо за ваш комментарий. Не могли бы вы вырезать отдельные предметы, или это не имеет значения? – davek

+1

Почему бы не создать индекс с тремя индексами там и время, а затем сделать то же самое без индексов там и посмотреть, если он быстрее. Я предполагаю, что не будет никакой разницы, поскольку сканирование трех индексов, а затем их объединение, вероятно, будет дороже, чем сканирование всего отношения. – tster

ответ

6

MySQL обычно перестраивает всю таблицу при добавлении индекса, поэтому все существующие получить перестроен, а также. Это может быть медленным.

Исключением является добавление индекса с использованием плагина InnoDB, а это не так.

Насколько я знаю, при построении индекса он всегда выполняет полное сканирование таблицы, однако при индексировании, если вы добавляете индекс, который имел тот же (или поднабор) столбцов в качестве другого индекса, он должен выполнить сканирование индекса. Такие индексы обычно полезны, если столбцы находятся в другом порядке.

Использование запаса mysql, чем больше индексов у вас есть, тем медленнее будет новый, поскольку он также восстанавливает существующие индексы.

С плагином, я думаю, это не имеет никакого значения.

В любом случае, если вы планируете добавлять несколько индексов, вы должны делать их все-в-один раз не по одному.

+0

@MarkR - +1 Благодарю вас за справочную информацию: очень полезно. – davek

0

Ваши существующие индексы не имеют отношения к созданию нового. Индекс - это физическая вещь на диске, и вы просите базу данных создать совершенно новую, которая имеет совершенно другую структуру из существующих трех.

(Оговорка: У меня нет конкретных знаний MySQL.)

Смежные вопросы