Mysql中如何查看Sql语句的执行时间(建议多准备点初始数据效果更佳)

Mysql中如何查看Sql语句的执行时间

一、初始SQL准备

  • 初始化表
-- 用户表
create table t_users(
                        id int primary key auto_increment,
-- 用户名
                        username varchar(20),
-- 密码
                        password varchar(20),
-- 真实姓名
                        real_name varchar(50),
-- 性别 1表示男  0表示女
                        sex int,
-- 出生年月日
                        birth date,
-- 手机号
                        mobile varchar(11),
-- 上传后的头像路径
                        head_pic varchar(200)
);
  • 初始化数据
--添加用户数据
insert into t_users values(null,'whj','123456','王恒杰',1,NOW(),'12345678901','boy.jpg');
insert into t_users values(null,'dzw','123456','邓正武',1,NOW(),'12345678901','boy.jpg');
insert into t_users values(null,'yfj','123456','杨福君',1,NOW(),'12345678901','girl.jpg');
insert into t_users values(null,'zx','123456','张西',1,NOW(),'12345678901','girl.jpg');
insert into t_users values(null,'zxj','123456','周宣君',0,NOW(),'12345678901','boy.jpg');
insert into t_users values(null,'lfk','123456','刘福昆',1,NOW(),'12345678901','boy.jpg');
  • 表结构
    在这里插入图片描述

  • 相关数据

在这里插入图片描述

二、Mysql查看Sql语句的执行时间

1、show profiles;

最开始输入show profiles.此时没有数据

在这里插入图片描述

2、show variables;
  • show varables:查看profiling是否开启,即Value为ON

在这里插入图片描述

直接使用show variables命令会将所有变量展示出来,太多了,我们不方便查看

就可以使用模糊查询了,用like将profiling挑选出来

一般没有开启都为off

 show variables like 'profiling';

在这里插入图片描述

3、set profilling=1,开启profiling
show variables like 'profiling';

在这里插入图片描述

这样我们的Mysql就可以查看Sql语句的执行时间

三、不同查询的执行时间

select * from t_users;     
select id,username,password,real_name,sex,birth,mobile,head_pic from t_users;
 
select * from t_users where username like 'whj';

在这里插入图片描述

  • 三种查询的时间对比

在这里插入图片描述

结论:

sql 在使用SELECT语句或者使用其它语句时,直接使用*和把所有的字段弄上去查询,性能有很大差距,所以我们平时写查询最好用字段写上

  • 13
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
可以使用Spring Boot提供的AOP(面向切面编程)功能实现此功能。具体步骤如下: 1. 创建一个`SqlExecutionListener`类,实现`ApplicationListener`接口,监听`ApplicationReadyEvent`事件,在应用启动时初始SQL执行历史表。 ``` @Component public class SqlExecutionListener implements ApplicationListener<ApplicationReadyEvent> { @Autowired private JdbcTemplate jdbcTemplate; @Override public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) { // 初始SQL执行历史表 jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS sql_history (id INT PRIMARY KEY AUTO_INCREMENT, sql_text TEXT, create_time DATETIME DEFAULT CURRENT_TIMESTAMP)"); } } ``` 2. 创建一个`SqlExecutionAspect`类,使用`@Aspect`注解声明切面,在切面定义一个`@Around`注解的方法,用来拦截所有DAO层的SQL执行,将SQL保存到SQL执行历史表。 ``` @Aspect @Component public class SqlExecutionAspect { @Autowired private JdbcTemplate jdbcTemplate; @Around("execution(* com.example.dao..*(..))") public Object logSql(ProceedingJoinPoint joinPoint) throws Throwable { String sql = joinPoint.getArgs()[0].toString(); // 获取DAO层执行SQL语句 Object result = joinPoint.proceed(); // 执行DAO层方法 // 将SQL保存到SQL执行历史表 jdbcTemplate.update("INSERT INTO sql_history (sql_text) VALUES (?)", sql); return result; } } ``` 3. 在`application.properties`配置文件添加数据源相关的配置。 ``` spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver ``` 通过以上步骤,应用启动后,所有DAO层执行SQL语句都会被保存到SQL执行历史表
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小王java

学习java的路上,加油!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值