【发布时间】:2020-05-11 03:51:34
【问题描述】:
我有一个使用InnoDB 存储引擎的MySQL 表。它包含大约 8000000 个数据行,当我使用时
delete from t where id in(1,2,3...)
删除10000行数据,虽然id是主键,但没有提示主键索引。表t有6 indexes(Including primary key)。当我把SQL改成
select * from t where id in(1,2,3...)
它可以命中主键索引。当我减少参数删除5000行数据时,或者当我删除非主键索引但仍然删除10000行数据时,也可以命中主键索引。
mysql版本是5.7.27。 要删除的id是根据具体情况选择的,不是连续的。 当我尝试保留两个二级索引时,仍然可以使用主键索引。
为什么指定了主键值却没有命中索引?
deleted records的数量和secondary index的数量有什么关系?
【问题讨论】:
-
哪个mysql版本?我怀疑你用过
EXPLAIN {query}- 你能把它包括进来吗?你的id总是连续的吗?为什么这里没有范围?围绕deleted records和secondary index的最后一个问题可能有更多的上下文需求需要理解这个问题。欢迎来到 SO -
版本是5.7.27
-
要删除的id是根据具体情况选择的,不是连续的
标签: mysql indexing innodb sql-delete