今天发现有一条delete语句长时间处于updating状态而执行不完,导致后边的读操作都无法进行。我根据delete的where条件写成select语句,用explain查看执行计划,发现没有用到任何索引(其实相关where条件字段是建立了索引的,而且还是主键),并且被描述为“Impossible WHERE noticed after reading const tables”。+----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
| 1 | SIMPLE | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Impossible WHERE noticed after reading const tables |
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
按我的理解是即便是不可能的结果,mysql在delete时会因为索引中没有这条记录而没有返回结果,但现在的表现显然是正在全表扫描找这条记录。更令我奇怪的是,执行select查询时倒是很快地返回没有这条记录select * FROM `tbl` WHERE id = '-1';
Empty set (0.00 sec)
但delete操作却依然诡异,长时间。| 716353 | root | localhost | db | Query | 275 | updating | delete FROM `tbl` WHERE id = '-1' |
这个问题有没有办法解决呢?
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
| 1 | SIMPLE | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Impossible WHERE noticed after reading const tables |
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
按我的理解是即便是不可能的结果,mysql在delete时会因为索引中没有这条记录而没有返回结果,但现在的表现显然是正在全表扫描找这条记录。更令我奇怪的是,执行select查询时倒是很快地返回没有这条记录select * FROM `tbl` WHERE id = '-1';
Empty set (0.00 sec)
但delete操作却依然诡异,长时间。| 716353 | root | localhost | db | Query | 275 | updating | delete FROM `tbl` WHERE id = '-1' |
这个问题有没有办法解决呢?
解决方案 »
- 循环重复
- 存储过程的问题 感谢
- 请问怎么么sql server下的存储过程转到mysql下的存储过程,语法有怎样的变化
- mysql 存储过程游标的问题
- 如何在命令行中将mysql连接服务器命令和sql语句一次性执行?
- mysql 5.0.18 for win32安装后在安装目录下没有include文件夹
- MYSQL有没有这样的函数或者存储过程啊
- 我用MySQL和Tomcat做JSP,配置数据源后,能够向数据库中插入数据,但是不能够查询出来!
- ===================mysql新手简单问题=====================
- 我的BDE 连MYSQL怎么总是出现:key violation.[tcx][myodbc]access denied for user:'sa@机器名‘(using password:YES)
- mysql插入中文乱码问题
- 如何从源数据库调用存储过程并将得到的值放入目标数据库
show create table tt
确实不加单引号即可,您太厉害了,谢谢!经过试验,单引号内包括负号的情况都会出现这个问题,如:delete from tb where id='-1'但select * from tb where id='-1' 则无此问题。为什么会出现这种问题呢?我的mysql版本是5.1.52