MySQL explain使用日志一

MySQL explain使用日志一

以下结果由本篇中的测试语句推测得出,可能有误差,发出来算是抛砖引玉吧

建表DDL
CREATE TABLE `barrage_info` (
  `barrage_id` int(11) NOT NULL AUTO_INCREMENT,
  `barrage_sender_id` int(11) NOT NULL,
  `content` varchar(512) NOT NULL,
  `speed` int(11) NOT NULL,
  `color` varchar(16) NOT NULL,
  `text_size` int(11) NOT NULL,
  `star_num` int(11) NOT NULL,
  `barrage_send_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `road` int(11) NOT NULL,
  PRIMARY KEY (`barrage_id`),
  KEY `idx_sender_id` (`barrage_sender_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1003 DEFAULT CHARSET=utf8mb4;


CREATE TABLE `user_info` (
  `user_id` bigint(11) NOT NULL AUTO_INCREMENT,
  `nick_name` varchar(64) NOT NULL,
  `user_sex` varchar(8) DEFAULT NULL,
  `user_phone_num` varchar(16) DEFAULT NULL,
  `user_description` varchar(255) DEFAULT NULL,
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `user_email` varchar(64) NOT NULL,
  `user_password` varchar(64) NOT NULL,
  `user_status` tinyint(3) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`user_id`),
  UNIQUE KEY `user_info_user_email_un` (`user_email`)
) ENGINE=InnoDB AUTO_INCREMENT=220 DEFAULT CHARSET=utf8mb4;

使用分析
/**
* 根据table得知 先查u2表,需要显示只有u1表的列,u2表用到的列只有user_email,
* 且该字段设置了唯一值索引,因此u2表最终走的是index类型,即:**索引列**全表扫描
* 接着查u1表,因为上一个查出来的u2的user_email列是唯一的,所以u1这里直接一一对应查询,
* 类型就是eq_ref
* 暂时测试的情况表明,等号左边的列是唯一索引列时,若右边为变量,则使用的是eq_ref类型
*/
EXPLAIN SELECT u1.* from user_info u2 , user_info u1 where u2.user_email = u1.user_email;

1


/**
* 根据id顺序执行,先查u1,需要显示是u1的全部列,包括未加索引的列,所以这里u1直接走的ALL全表扫描
*/
EXPLAIN SELECT u1.* from user_info u1 , user_info u2 where u2.user_email = u1.user_email;

2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Tomshidi

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值