【发布时间】:2013-08-15 11:17:07
【问题描述】:
我不知道,为什么删除 innodb 表需要大约 30 秒
表格有 400 万行
ID 索引
KID 索引
(那只是索引,没有主索引,没有唯一性,因为表是分区的) 表已分区
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
【问题讨论】:
-
你的主键是什么?尝试仅按该键删除。
-
请张贴您表中存在的键。还可以尝试
SHOW INDEXES语句来确定您的密钥基数。 -
您要删除任何条记录?当然你不想要
order by -
阅读此dba.stackexchange.com/questions/48072/… 为什么您应该始终在刚刚编写的 innodb 表上创建主索引或唯一索引并将其发布在 dba stackexchange 上
-
你应该运行 EXPLAIN PARTITIONS 来查看你的查询是否使用了分区修剪