2012-06-22 5 views
0

Я работаю с довольно старым веб-приложением, которое использует MySQL в качестве базы данных. 90% таблиц - MyISAM, у них нет индексов по внешним ключам.Добавление индекса без повышения производительности ограничения внешнего ключа

Я рассматривал перенос всего этого на InnoDB, чтобы я мог применять ограничения внешнего ключа и тому подобное. Однако, поскольку приложение устарело и немного странно, он полагался на код для обеспечения ссылочной целостности, и я боюсь, что внесение такого изменения в базу данных может привести к нескольким сбоям кода. У меня нет времени, чтобы пройти всю кодовую базу и убедиться, что все делает то, что она должна, у меня нет причин подозревать, что это не я просто знаю о возможности добавления ограничений внешнего ключа, вызывающих непредвиденные вопросы.

Я думал, что другой подход может заключаться в том, чтобы просто добавлять индексы в поля внешнего ключа, не создавая ограничений. Я думаю, что это улучшит производительность, не рискуя повредить существующую функциональность. Может ли кто-нибудь сказать мне, есть ли причина не делать этого? Получаю ли я такое же повышение производительности, как и добавление индексов и ограничений внешнего ключа?

+1

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

ответ

1

Да, просто добавление индексов должно дать вам почти такое же повышение производительности. Ограничения внешнего ключа больше для ссылочной целостности, чем производительность.

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

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