在mysql中使用索引字段删除很慢

时间:2019-05-06 09:40:37

标签: mysql database performance database-performance query-performance

我有两个表PARENT和CHILD。父母与孩子有一对多的关系。 PARENT表分别具有300000和CHILD具有1500000行。具有某些ID的行会频繁插入和删除,删除大约需要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

0 个答案:

没有答案