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 对于查看执行计划的有利点,有兴趣大家可以去尝试看看,这样查看执行计划对比之前是否有便利之处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值