У меня есть две таблицы РОДИТЕЛЯ и РЕБЕНКА.РОДИТЕЛЬ имеет отношения один к многим с ребенкомТаблица PARENT имеет 300000, а CHILD 1500000 строк соответственно.Строка с некоторым идентификатором вставляется и удаляется часто, и удаление занимает время приблизительно 20 секунд.И План выполнения удаления в таблице CHILD показывает сканирование всей таблицы.Почему удаление в индексированном поле занимает много времени?
ОБНОВЛЕНИЕ - 1
Схема таблицы родителя и потомка
show create table parent;
| Table | Create Table | parent | CREATE TABLE `parent` (
`id` bigint(20) NOT NULL,
`name` varchar(500) COLLATE latin1_general_cs DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs |
show create table child;
| Table | Create Table | child | CREATE TABLE `child` (
`id` bigint(20) NOT NULL,
`value` varchar(2000) COLLATE latin1_general_cs DEFAULT NULL,
KEY `child_cons` (`id`),
CONSTRAINT `child_cons` FOREIGN KEY (`id`) REFERENCES `parent` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs |
ОБНОВЛЕНИЕ - 2
Оператор удаленияиспользуется
delete from child where id=1;
План выполнения
explain delete from child where id=1;
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
| 1 | SIMPLE | child | ALL | child_cons | NULL | NULL | NULL | 1350398 | Using where |
1 строка в наборе (0,00 с)
ОБНОВЛЕНИЕ - 3
Дочерняя таблица содержит только 5строки для id = 1