MYSQL explain 可没有那么简单,explain的猫腻与函数
explain 到底会不会执行命令着一点很多人应该是不置可否的任务,他不能执行命令,而仅仅是对语句进行评估然后反馈执行的计划。
我们创建一个函数
DELIMITER $$
CREATE FUNCTION insertinto() RETURNS char(50) CHARSET utf8
DETERMINISTIC
BEGIN
insert into test (id) values (1),(2);
RETURN 'OK';
END $$
上面的例子中关于mysql 中的函数实际上是被执行了,那如果我换了成其他的DML 语句会怎样,后果不敢想象。
所以这里点的问题是,函数尽量不要带有和表有关的操作。如果带有和表有关的操作则在explain的情况下会出现上面的问题,想象中是查看执行计划,但结果是操作了这个语句。
那么出现这样的问题,如果要进行执行计划的查看,但是又不想不运行这个函数,可以通过在执行explain 语句的情况前添加事务的方法,来规避一些风险。
同时在MYSQL 8 中的后续命令 explain analyze 命令是否也有这个问题我们看一下,从下面的图可以看出,MYSQL 8 中新添加了的 explain ananlyze 实际上在命令的安全方面和之前没有太大的变化,所以这个安全的问题,还是需要注意。
关于MYSQL 8 中的的 explain analyze 这个命令如果感兴趣的可以查看
https://mysqlserverteam.com/mysql-explain-analyze/
这里有详细的说明和使用的方法,尤其对于树形展示的方法,便于处理和查看
这里没有提供复杂的语句,所以没有展现 explain format = tree 对于查看执行计划的有利点,有兴趣大家可以去尝试看看,这样查看执行计划对比之前是否有便利之处。
相关文章