绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
MYSQL explain 可没有那么简单,explain的猫腻与函数
2021-01-11 07:43:56


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


分享好友

分享这个小栈给你的朋友们,一起进步吧。

数据库杂货铺
创建时间:2021-12-10 09:57:47
分享数据库管理,运维,源代码 ,业界感受, 吐槽
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • liuaustin
    栈主

小栈成员

查看更多
  • miemieMIA
  • 578154454
  • ylfxml
戳我,来吐槽~