从之前的文章:SQL 语句在Oracle中执行流程和SQL 语句在MySQL中执行流程,我们知道,不同的DBMS的SQL的执行原理是相通的,只是在不同的软件中,各有各的实现路径。
既然一条SQL语句会经历不同的模块,那我们就来看下,在不同的模块中,SQL执行所使用的时间是怎样的。
下面我们来看如何在MySQL中对一条SQL语句的执行时间进行分析。
首先我们需要看下profiling是否开启,开启它可以让MySQL收集在SQL执行时所使用的资源情况,命令如下:
select @@profiling;
profiling=0代表关闭,我们需要把profiling打开,即设置为1:
set profiling=1;
然后我们执行一个SQL查询(你可以执行任何一个SQL查询):
select * from wucai.heros;
查看当前会话所产生的所有profiles:
你会发现我们刚才执行了两次查询,Query ID分别为1和2。如果我们想要获取上一次查询的执行时间,可以使用:
show profile;
当然你也可以查询指定的Query ID,比如:
show profile for query 2;
查询SQL的执行时间结果和上面是一样的。
在8.0版本之后,MySQL不再支持缓存的查询,原因我在上文已经说过。一旦数据表有更新,缓存都将清空,因此只有数据表是静态的时候,或者数据表很少发生变化时,使用缓存查询才有价值,否则如果数据表经常更新,反而增加了SQL的查询时间。
你可以使用select version()来查看MySQL的版本情况。