0

我不知道,为什么删除 innodb 表需要大约 30 秒

表有 400 万行

身份证索引

儿童指数

(那只是索引,没有主索引,没有唯一性,因为表是分区的)表是分区的

 delete from my_table where id = 'xxx' and kid = 'ds54f5sad6w5' limit 1

在慢日志中是查询时间 39 秒锁定时间 36 秒检查行 96879

问题出在磁盘上(使用了 ssd)

解释 select sql_no_cache * from my_table WHERE id= '1663903' AND kid= '84d4af871929d2159d7d7399a79bb384' LIMIT 1

解释写

id select_type table    type        possible_keys key    key_len ref  rows Extra
1  SIMPLE      my_table index_merge id,kid        id,kid 3,98    NULL 1    Using intersect(id,kid); Using where
4

1 回答 1

0

您的 EXPLAIN 表明您的查询正在使用“index_merge”访问type

所以它必须搜索两个索引(这些索引显示在keys字段中),找到相关条目,然后找到两个结果之间的交集。

这可能比非索引搜索要好,但通常最好创建一个包含两列的单个索引,超过 (id, Kid)。

于 2013-08-15T11:45:07.437 回答