Определение внешнего ключа также определяет индекс? У меня есть mysql v5.1.46, и я смотрю на Инструмент администрирования MySQL и его шоу внешний ключ как индекс, таким образом, я хотел подтвердить?
InnoDB требует индексов по внешним ключам и ссылочным ключам, чтобы проверка внешнего ключа могла быть быстрой и не требовала сканирования таблицы. В ссылающейся таблице должен быть индекс, в котором столбцы внешнего ключа перечислены как первые столбцы в том же порядке. Такой индекс создается для ссылающейся таблицы автоматически, если он не существует. (В этом отличие от некоторых более старых версий, в которых индексы нужно было создавать явно, иначе создание ограничений внешнего ключа не удавалось.) Index_name, если задано, используется, как описано ранее.
Да, MySQL 5.1 автоматически создает индекс для ссылающейся таблицы, когда вы определяете ограничение внешнего ключа. MySQL требует индекса как для ссылочной таблицы, так и для ссылочной таблицы для внешних ключей.
Однако обратите внимание, что индекс создается автоматически только для ссылающейся таблицы, а не для ссылочной таблицы. MySQL не позволит вам создать внешний ключ, который ссылается на поле в указанной таблице, которое не может использовать индекс:
CREATE TABLE orders (
id int PRIMARY KEY,
code int,
name varchar(10)
) ENGINE=INNODB;
CREATE TABLE order_details (
detail_id int PRIMARY KEY,
order_code int,
value int,
FOREIGN KEY (order_code) REFERENCES orders(code)
) ENGINE=INNODB;
ERROR 1005 (HY000): Can't create table 'test.order_details'
Это не очень распространено, поскольку вы часто создаете ограничения внешнего ключа, которые ссылаются на первичный ключ таблица, на которую указывает ссылка, и первичные ключи индексируются автоматически. Однако, наверное, стоит иметь в виду.
Создание индекса в поле код
таблицы orders
может решить проблему:
CREATE INDEX ix_orders_code ON orders(code);