能否通过最终的物理计划逆向还原出可执行的sql啊

目前在探索根据最终生成的物理计划逆向生成sql的问题,不知道能不能还原出一条可执行的sql语句,有大佬可以交流下吗

dumpling导出的就是sql,但是sst文件的不行

逆向生成SQL语句可能并不完全准确,因为执行计划中可能包含了MySQL的优化器对查询进行的优化操作,而这些优化操作可能无法完全还原为原始的SQL语句

1 个赞

我觉得是可以的,不过不太可能和原来的sql一摸一样

https://zhuanlan.zhihu.com/p/334642671

要是可以的话,也不会是原始SQL了,毕竟,好多SQL,explain,结构会一样,不准确

你导出binlog文件不就可以找到原始sql么

还原语句的价值在哪儿,感觉理论上应该可以还原出(等价的)原始语句。

不需要和原始语句一样,只要逆向生成的语句执行结果和原始语句执行结果一样就可以了

应该不行的吧

为啥啊,执行计划不是跟原始语句中各部分对应的嘛

可以根据执行计划逆向生成一些SQL,但是和原始的语句可能会不一样,比如
select a from t where id=1 and 1=1;
select a from t where id=1;

上面两个SQL的执行计划是一样的,但是语句不一样,更复杂的语句可能会有更多的差异。

一个SQL语句在tidb server经过语法解析、逻辑改写和优化、再根据统计信息生成最终的物理执行计划,这里变化的因素比较多,根据变化的因素生成变化的结果,这里就是一个函数问题了。

楼主的问题,可以归纳为y=f(x)和x=f’(y)的模型问题,分析一下就能理解了。

逆向还原出来的肯定和原语句不同,能不能还原出来的执行结果和原语句一样的,效果相同就行了

逆向还原的价值在哪里呢?from和where应该能看出来,但是select的字段是不是有难度?

不行吧

我觉得简单语句是可以的,比如point_get这种,但是复杂的估计就不能还原了,除非通过采取类似撞库的方法,将还原的语句逐步调整生成执行计划,然后和原始计划进行匹配。

是什么场景需要将物理计算逆向还原出可执行的SQL?

这个很难吧

能还原出一条模糊的SQL,至于执行估计还差点儿意思呀。 得把优化器吃透了,才能推出个大概。而且这种需求, 落地的话, 应该是需要一个SQL审计平台这类安全或者监控相关的项目吧。