00:01
好,接下来的话呢,我们就来具体看一下,诶,我们刚刚的这个执行分析插件啊,它的底层是怎么执行的,好那么首先呢,我们还是来到这个,诶插件类里面,我们直接找到它的这个except方法,给它打上断点,好接下来我们就来去运行我们的这个方法,好第八个运行好找一下。OK,代码来到这,呃,那么来到这以后呢,诶这个我们直接找一些关键的地方就可以了啊,它这个地方的话就是拿到我们这个map的statement,然后呢,诶去拿到我们相关的一些这个搜口语句啊,这个棒的搜口,那么我们知道,诶比如说呢,我让他这个直接去执行啊。好,那么我们知道这里面呢,是由我们的诶so口L语句的啊,我们可以看得到,由我们这个搜口语句,然后这个so口语句呢,就是我们当前要去执行的,然后啊,它最后呢,把这些东西呢,都传到了一个SQ分析里面啊这个方法中,然后我们直接来到这个方法里面,那么我们能看到的是注意。他创建了一个string build,然后呢,呃,直接啊,在这个string build里面呢,放了一个X plan啊,那么我们知道啊,这个是我们啊买soq里面可以使用的一个这个搜口分析的一个这个工具啊,我们可以通过它来进行这个搜口分析啊,然后呢,又呃end了一个我们棒的soq里面获取到的这个搜口语句啊,所以说我们能看得到,大家就接着往下走。
01:22
好,我们断点打到这啊,然后呢,直接让断点过来,好接着往下走,好再来走,然后呢,他最后呢,拿到我们这个,把这个搜购语句也拼到这个string build以后呢,然后再把它转换成一个诶字符串,那么现在我们就能看到,最终我们拿到的这个搜口语句呢,就是这个样子的,好,我们先把它。好,我们一会再来说它啊,好,我们现在看到它,那么看到它以后呢,接下来它就要往下走了啊,那么这个地方的话,就相当于因为我们有了一条搜口语句了,他要去分析这条搜口语句,所以说呢,他必须要把这条搜口句呢,给它发送到我们的这个数据库里面,因此的话呢,这个位置我们看到的就是他不去要去什么呀,构造出一个这个map的statement里啊map的statement,因为我们之前已经说过,这个家伙呢,其实就代表着一条这个so语句了啊,把它构造出来以后呢,诶再拿到我们的prepared statement,然后呢,具体的拿到我们这个prepare的一些对象啊,最后呢,我们去啊,诶做一个执行啊,那么我们再去执行的时候呢,大家注意它是做了这样的一个分析啊,我拿到你这个statement的,诶执行以后的这个结果集,那么我去迭代这个结果集,我来判断你执行完分析以后的,诶这个这一列的结果是不是叫做U。
02:43
因为如果说不是,诶大家注意它这个位置呢,就有一个诶判断一下是不是要去停止这个操作呀,那么我们在这个位置配置的是诶让它去停止的,所以说呢,大家注意它这个地方就是处了,那么如果你是true的话呢,直接这个异常就给你抛出来了,那么我们能看到的是它抛出来的这个异常呢,诶其实就是我们刚刚诶在这个只unit里面所看到的这个异常。
03:12
哦,这个我们又执行了一次,它没有了啊,好,那么我们一会来啊,再去看一下这个异常就是一个什么,哎,For table就是全表的一个操作啊,已经被这个终止了,然后so语句呢,就是我们当前要去执行的这个soco语句,所以说你就会发现,如果我发现你是一个全表的操作,那么我就立马执行啊,立马这个终止了,好,那我们来看一下它这个位置的这个意思是什么,那我们就直接拿到他刚刚拿到了这条搜QL语句啊,就是它CTRC,那么我们直接来到我们这个数据库里面给他执行一下就可以了啊好,我们把这个先删掉。好,直接放到这来执行一下,诶没拷贝出来,我们再来拷贝一下。好CTRLC,然后呢,拿到这个地方我们来执行一下,好把这个执行一下,它这就是对我们这条SQL语句的一个分析啊,那么分析完成以后呢,我们来看它获取的是这一列啊,我们来看一下。
04:10
好啊,它在这个位置呢,获取的是诶这一列,那么我们现在能看到的是这一列里面呢,它叫做delinting all Rose,就是我们删除所有的这个行数啊,然后呢,一判断是不是U,因为啊我们发现不是,那么这个时候呢,它就断定你这是一个全表的操作,那么我就给你终止掉了,好,那比如说呢,你看一下啊,假如说我们在删除的时候呢,诶我给了一些条件了啊,比如说VR,我们这个ID呢,比如说我们随便写一个啊,等于这个啊100。好,如果说是这样的一条soql语句的话,我们再来分析一下,诶你来看到它这个位置得到的结果就是一个U音V了,那么他认为这就是一个按照条件啊来进行这个删除的了,就不是一个全表的操作,好所以说呢啊,它就是啊相当于把我们的原本的SQL语句呢,诶拼接上了一个,诶就是我们这个X play啊这个关键字,然后呢,进行一个搜口L语句的分析,如果我分析到你是一个全表操作,那我就立马给你停止掉了,好那么这就是我们搜口执行啊这个蓝这个插件的它的这个工作原理啊,简单的呢,就给大家去解析这么多就可以了,那么最后的话呢,好再来给大家去说一下啊,其实我们这个执行分析插件的话呢,啊,我们只建议大家在这个开发,呃,开发的这个环境里面使用啊,如果在这个生产环境里面的话呢,哎,就不建议大家再去使用了啊。
我来说两句