Как правило, MySQL не требует от вас вставки внешних ключей. Более того, пока вы используете механизм хранения MyISAM, вы не сможете воспользоваться преимуществами определения внешних ключей. Они принимают синтаксис внешнего ключа, но внутренне они просто игнорируют эти операторы, подробности см. запись внешнего ключа в документации MySQL .
Вместо этого вы можете рассмотреть возможность определения дополнительных индексов для столбцов внешнего ключа, что может повысить производительность вашего запроса. Вы можете определить индекс вместе с вашим определением таблицы
CREATE TABLE IF NOT EXISTS `replies` (
`reply_id` int(11) NOT NULL AUTO_INCREMENT,
`reply_topic_id` int(11) NOT NULL,
`reply_content` text NOT NULL,
`reply_author_id` int(11) NOT NULL,
`reply_date` int(10) NOT NULL,
PRIMARY KEY (`reply_id`),
INDEX (`reply_topic_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Подробнее см. mysql create table .
В качестве альтернативы вы можете рассмотреть возможность изменения вашего механизма хранения на InnoDB и использовать внешние ключи, которые будут автоматически добавлять индексы к нужным столбцам. Но вы только выиграете, если вам действительно нужны другие функции помимо оптимизации производительности, такие как ограничения внешнего ключа .
Как правило, можно придерживаться рекомендаций, приведенных в руководстве по mysql. Если вам не нужны дополнительные преимущества, такие как ограничения, механизм хранения MyISAM обеспечит лучшую производительность. Итак, если вы не хотите, чтобы база данных обеспечивала ссылочную целостность, вместо этого сделайте это самостоятельно в своем приложении, тогда MyISAM с соответствующими индексами будет более быстрым и более эффективным решением. Если вы хотите, чтобы ваша база данных обеспечивала ссылочную целостность, переключитесь на механизм хранения InnoDB и определите внешние ключи с соответствующими ограничениями.