Mysql索引案例分析

这篇文章写个案例,测试一下MySQL索引机制

  1. 测试表结构
CREATE TABLE `t_qrcode_op` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`op_mobile` varchar(16) NOT NULL,`pr_code` char(10) NOT NULL,PRIMARY KEY (`id`),UNIQUE KEY `om_pc` (`op_mobile`,`pr_code`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='url短码记录表';CREATE TABLE `u_record` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`cu_mobile` varchar(16) NOT NULL,`op_mobile` varchar(16) NOT NULL,`pr_code` varchar(20) NOT NULL,`in_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '时间',PRIMARY KEY (`id`) USING BTREE,UNIQUE KEY `cm_pc` (`cu_mobile`,`pr_code`)
) ENGINE=InnoDB AUTO_INCREMENT=574 DEFAULT CHARSET=utf8 COMMENT='记录表';CREATE TABLE `u_record_new` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`cu_mobile` varchar(16) NOT NULL,`qr_id` int(11) NOT NULL,`in_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '时间',PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=574 DEFAULT CHARSET=utf8 COMMENT='记录表';
  1. 给t_qrcode_op表新增2000条数据
-- 删除存储过程
drop procedure if exists proc_insertQrOp;-- 创建存储过程
delimiter $$
create procedure proc_insertQrOp(in insertcount int)
begindeclare i int default 0;declare startNum bigint default 13700000001;lable:while i<insertcount doinsert into t_qrcode_op(op_mobile,pr_code)values(concat(startNum+i,""),concat("P",10001+i));set i=i+1;end while lable;
end $$
delimiter;-- 清空表的原有数据
delete from t_qrcode_op;-- 调用存储过程
call proc_insertQrOp(2000);
  1. 给u_record表新增2000条数据
-- 删除存储过程
drop procedure if exists proc_insertRecord;-- 创建存储过程
delimiter $$
create procedure proc_insertRecord(in insertcount int)
begindeclare i int default 0;declare startNum bigint default 13700000001;declare startNum1 bigint default 15100000001;declare opm bigint ;declare prc bigint ;lable:while i<insertcount doset opm = startNum+floor(i/2);set prc = 10001+floor(i/2);insert into u_record(cu_mobile,op_mobile,pr_code)values(concat(startNum1+i,""),concat(opm,""),concat("P",prc));set i=i+1;end while lable;
end $$
delimiter;-- 清空表的原有数据
delete from u_record;-- 调用存储过程
call proc_insertRecord(2000);
  1. 给u_record_new插入2000条数据
-- 删除存储过程
drop procedure if exists proc_insertRecordNew;-- 创建存储过程
delimiter $$
create procedure proc_insertRecordNew(in insertcount int)
begindeclare i int default 0;declare startNum bigint default 13700000001;declare startNum1 bigint default 15100000001;declare opm bigint ;declare prc bigint ;declare qrid int;lable:while i<insertcount doset opm = startNum+floor(i/2);	set prc = 10001+floor(i/2);select id into qrid from t_qrcode_op where op_mobile = concat(opm,"") and pr_code = concat("P",prc);insert into u_record_new(cu_mobile,qr_id)values(concat(startNum1+i,""),qrid);set i=i+1;end while lable;
end $$
delimiter;-- 清空表的原有数据
delete from u_record_new;-- 调用存储过程
call proc_insertRecordNew(2000);

表结构图

  1. t_qrcode_op
    在这里插入图片描述
  2. u_record
    在这里插入图片描述
  3. u_record_new(将pr_code列和op_mobile列用qr_id列代替,事实上这种表更好,因为不会需要检查一致性问题)
    在这里插入图片描述

测试

# 先扫描rn,再查找o.id时用了主键索引
explain
select *
from u_record_new rn left join t_qrcode_op o on rn.qr_id = o.id;# 先扫描o,再查找rn.qr_id时进行全表扫描
explain
select *
from t_qrcode_op o left join u_record_new rn on o.id = rn.qr_id;# 走了索引
explain 
select *
from u_record where cu_mobile = "15100000804";# 没走索引,最左前缀
explain 
select *
from u_record where pr_code = "P10405";# 走了索引
explain 
select *
from u_record where cu_mobile = "15100000804" and pr_code = "P10402";# 走了索引
explain 
select *
from u_record where pr_code = "P10402" and cu_mobile = "15100000804";

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/187722.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

会员管理系统的意义何在?

在当今的商业环境中&#xff0c;会员管理系统已经成为企业运营的重要组成部分。会员管理系统的意义在于不仅能够帮助企业提高效率&#xff0c;提升用户体验&#xff0c;进行数据分析&#xff0c;营销推广&#xff0c;还能够帮助企业增加收入。下面&#xff0c;我们将详细探讨会…

微调Fine tune

网络架构 一个神经网络一般可以分为两块 特征抽取将原始像素变成容易线性分割的特征线性分类器来做分类 微调&#xff1a;使用之前已经训练好的特征抽取模块来直接使用到现有模型上&#xff0c;而对于线性分类器由于标号可能发生改变而不能直接使用 训练 是一个目标数据集上…

Linux驱动开发——网络设备驱动(实战篇)

目录 四、 网络设备驱动实例 五、DM9000 网络设备驱动代码分析 六、NAPI 七、习题 书接上回&#xff1a; Linux驱动开发——网络设备驱动&#xff08;理论篇&#xff09;-CSDN博客 &#xff08;没看过上面博客的同学&#xff0c;skb是linux对于网络套接字缓冲区的一个虚拟…

Leetcode 136. 只出现一次的数字

class Solution {//任何数与0异或结果都是原来的数//任何数和自身异或结果都是0//异或满足交换律和结合律//a ^ b ^ a (a ^ a) ^ b 0 ^ b bpublic int singleNumber(int[] nums) {int res nums[0];for(int i 1; i < nums.length; i){res ^ nums[i];}return res;} }

OpenCvSharp从入门到实践-(04)色彩空间

目录 1、GRAY色彩空间 2、从BGR色彩空间转换到GRAY色彩空间 2.1色彩空间转换码 2.2实例 BGR色彩空间转换到GRAY色彩空间 3、HSV色彩空间 4、从BGR色彩空间转换到HSV色彩空间 4.1色彩空间转换码 4.2实例 BGR色彩空间转换到HSV色彩空间 1、GRAY色彩空间 GRAY色彩空间通常…

Spring简单的存储和读取

前言 前面讲了spring的创建&#xff0c;现在说说关于Bean和五大类注解 一、Bean是什么&#xff1f; 在 Java 语⾔中对象也叫做 Bean&#xff0c;所以后⾯咱们再遇到对象就以 Bean 著称。这篇文章还是以spring创建为主。 二、存储对象 2.1 俩种存储方式 需要在 spring-conf…

使用Jmeter进行http接口性能测试

在进行网页或应用程序后台接口开发时&#xff0c;一般要及时测试开发的接口能否正确接收和返回数据&#xff0c;对于单次测试&#xff0c;Postman插件是个不错的Http请求模拟工具。 但是Postman只能模拟单客户端的单次请求&#xff0c;而对于模拟多用户并发等性能测试&#xf…

[Verilog语法]:===和!==运算符使用注意事项

[Verilog语法]&#xff1a;和!运算符使用注意事项 1&#xff0c; 和 !运算符使用注意事项2&#xff0c;3&#xff0c; 1&#xff0c; 和 !运算符使用注意事项 参考文献&#xff1a; 1&#xff0c;[SystemVerilog语法拾遗] 和!运算符使用注意事项 2&#xff0c; 3&#xff0c;

机器学习入门(第五天)——决策树(每次选一边)

Decision tree 知识树 Knowledge tree 一个小故事 A story 挑苹果&#xff1a; 根据这些特征&#xff0c;如颜色是否是红色、硬度是否是硬、香味是否是香&#xff0c;如果全部满足绝对是好苹果&#xff0c;或者红色硬但是无味也是好苹果&#xff0c;从上图可以看出来&#…

数据可视化:用图表和图形展示数据

写在开头 在当今信息爆炸的时代,海量的数据如同一座沉默的宝库,等待着我们挖掘和理解。然而,这些庞大的数据集本身可能令人望而生畏。在这个时候,数据可视化成为了解数据、发现模式和传达信息的强大工具。本篇博客将带领你探索数据可视化的奇妙世界,学习如何在python中使…

91基于matlab的以GUI实现指纹的识别和匹配百分比

基于matlab的以GUI实现指纹的识别和匹配百分比,中间有对指纹的二值化&#xff0c;M连接&#xff0c;特征提取等处理功能。数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 91M连接 特征提取 (xiaohongshu.com)

Windows 安装redis,设置开机自启动

Windows 安装redis,设置开机自启动 文章目录 Windows 安装redis,设置开机自启动下载, 解压到指定目录设置redis密码启动redis服务端停止redis服务端设置自启动 下载, 解压到指定目录 官网地址: https://redis.io/ 安装包下载地址: https://github.com/tporadowski/redis/relea…

NB-IoT BC260Y Open CPU SDK⑥ADC的应用

NB-IoT BC260Y Open CPU SDK⑥ADC的应用 1、BC260Y_CN_AA模块 ADC的介绍2、ADC相关API的介绍3、软件设计4、实例分析5、以下是调试的结果:1、BC260Y_CN_AA模块 ADC的介绍 BC260Y-CN QuecOpen 模块提供 2 个专用于 ADC(ADC0、ADC1)功能的 I/O 引脚。通过相应的 API函数可以直…

GPLT(有空就写)

L2 - 047 锦标赛 思路&#xff1a; 将其放入一颗满二叉树上去考虑&#xff1a;从二叉树的最底层开始&#xff0c;每一轮比赛&#xff0c;为同一个祖先的左右两个儿子进行比较&#xff0c;而你需要将败者的能力值填到左右两个儿子其中一个上面&#xff0c;另一个就向上传递表示胜…

2023 IoTDB 用户大会倒计时 3 天 | 1 分钟让你了解 IoTDB!

叮叮&#xff01;距离 2023 IoTDB 用户大会在北京与大家见面还有 3 天&#xff01; 这场筹备已久的盛会&#xff0c;汇集了超 20 位大咖嘉宾带来的精彩议题&#xff0c;届时来自美国国家工程院、清华大学软件学院的产业大拿&#xff0c;与能源电力、钢铁冶炼、城轨运输、智能制…

【shell】正则表达式和AWK

一.正则表达式 通配符匹配文件&#xff08;而且是已存在的文件&#xff09; 基本正则表达式扩展正则表达式 可以使用 man 手册帮助 正则表达式&#xff1a;匹配的是文章中的字符 通配符&#xff1a;匹配的是文件名 任意单个字符 1.元字符&#xff08;字符匹配&…

NOIP2007提高组第二轮T3:矩阵取数游戏

题目链接 [NOIP2007 提高组] 矩阵取数游戏 题目描述 帅帅经常跟同学玩一个矩阵取数游戏&#xff1a;对于一个给定的 n m n \times m nm 的矩阵&#xff0c;矩阵中的每个元素 a i , j a_{i,j} ai,j​ 均为非负整数。游戏规则如下&#xff1a; 每次取数时须从每行各取走一…

恒驰服务 | 华为云云上运维服务offering

恒驰运维服务主要针对运维要求高或自身运维能力有限的客户&#xff0c;通过服务增购的形式&#xff0c;提供运维服务以协助客户做好云上资源运维管理&#xff0c;规避业务风险&#xff0c;降低运维开销&#xff0c;提升客户业务稳定性。 适用场景&#xff1a; 如何保障业务稳定…

内衣洗衣机哪个牌子好用?性价比高的迷你洗衣机推荐

洗衣机是现代家庭中必备的一种家用电器&#xff0c;它的使用简便、省时、省力&#xff0c;是我们生活中不可缺少的一部分&#xff0c;差不多家家户户都有一台&#xff0c;甚至两台以上。由于内衣内裤并不能够直接扔进洗衣机里进行清洗&#xff0c;因此一种内衣专业的洗衣机就出…

单机zk安装与zk四字命令

一、下载 Apache ZooKeeper可以在 Linux 系统中使用 wget 命令直接下载&#xff0c;官网地址 Apache ZooKeeper 二、解压 tar -zxvf apache-zookeeper-3.8.3-bin.tar.gz 进去解压的目录中&#xff0c; 进入到 zk 解压目录的 conf 目录&#xff0c;复制 zoo_sample.cfg 文件&a…