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)
begin
	declare i int default 0;
	declare startNum bigint default 13700000001;
	lable:
	while i<insertcount do
	insert 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)
begin
	declare i int default 0;
	declare startNum bigint default 13700000001;
	declare startNum1 bigint default 15100000001;
	declare opm bigint ;
	declare prc bigint ;
	lable:
	while i<insertcount do
	
	set 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)
begin
	declare 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 do
	set 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.mfbz.cn/a/219652.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SSH原理与应用与瞎玩

Secure Shell(SSH 安全外壳协议) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。它是专为远程登录会话(甚至可以用Windows远程登录Linux服务器进行文件互传)和其他网络服务提供安全性的协议&#xff0c;可有效弥补网络中的漏洞。通…

前后端分离vue+Nodejs社区志愿者招募管理系统

1、首页 1)滑动的社区照片册 使用轮播图&#xff0c;对社区的活动纪念与实时事件宣传。 每个图片附有文字链接&#xff0c;点击跳转对应社区要闻具体页。 2)社区公告栏 日常的社区公告以及系统说明在此区域中进行说明与展示。 2、志愿活动 1)志愿活动发布 想发布需要登录 2)志愿…

html和css写QQ会员页面导航

目录 1、css代码 2、html代码 效果图 1、css代码 <style>* {padding: 0;margin: 0;list-style: none;text-decoration: none;}div {margin: 30px auto;}li {float: left;height: 60px;background-color: rgb(102, 102, 102);line-height: 40px;}img {height: 100%;ma…

Hadoop学习笔记(HDP)-Part.09 安装OpenLDAP

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

索尼PMW580视频帧EC碎片重组开启方法

索尼PMW580视频帧EC碎片重组开启方法 索尼PMW-580摄像机生成的MXF文件存在严重的碎片化&#xff0c;目前CHS零壹视频恢复程序MXF版、专业版、高级版已经支持重组结构体正常的碎片&#xff0c;同时也支持对于结构体破坏或者覆盖后仅存在音视频帧EC数据的重组&#xff0c;需要注…

论文阅读:一种通过降低噪声和增强判别信息实现细粒度分类的视觉转换器

论文标题&#xff1a; A vision transformer for fine-grained classification by reducing noise and enhancing discriminative information 翻译&#xff1a; 一种通过降低噪声和增强判别信息实现细粒度分类的视觉转换器 摘要 最近&#xff0c;已经提出了几种基于Vision T…

【数据结构—单链表的实现】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 1. 链表的概念及结构 2. 单链表的实现 2.1单链表头文件——功能函数的定义 2.2单链表源文件——功能函数的实现 2.3 单链表源文件——功能的测试 3.具体的理解操作…

ES-环境安装(elasticsearch:7.17.9,kibana,elasticsearch-head)

ES 环境搭建 1 拉取镜像 常用三件套 docker pull kibana:7.17.9 docker pull elasticsearch:7.17.9 docker pull mobz/elasticsearch-head:52 启动镜像 elasticsearch 安装 这里可以先不挂载文件启动一波&#xff0c;然后把容器里的文件拷贝出来 docker run -p 19200:9200 …

【Linux系统编程】开发工具yum和vim

目录 一&#xff0c;yum工具的使用 1&#xff0c;yum的介绍 2&#xff0c;yum的使用 二&#xff0c;vim工具的开发 1&#xff0c;vim的介绍 2&#xff0c;模式的使用 3&#xff0c;vim配置文件 4&#xff0c;sudo配置文件 一&#xff0c;yum工具的使用 1&#xff0c;y…

2023美图创造力大会开幕,美图发布AI视觉大模型4.0

12月5-6日&#xff0c;主题为“未来AI设计”的美图创造力大会&#xff08;Meitu Creativity Conference&#xff0c;简称MCC&#xff09;在厦门举行。 本届大会由美图公司与站酷联合举办&#xff0c;聚焦于设计师生态和AI设计趋势。大会现场发布《2023年度AI设计实践报告》&am…

WeiPHP 微信开发平台 SQL注入漏洞复现

0x01 产品简介 weiphp 是一个开源,高效,简洁的微信开发平台,基于 oneThink 内容管理框架实现。 0x02 漏洞概述 weiphp 微信开发平台 _send_by_group、 wp_where、 get_package_template等接口处存在 SQL 注入漏洞,攻击者利用此漏洞可获取数据库中的信息(例如,管理员后台…

中标!世界500强中信集团携手道本科技共建风险管理应用三期建设项目

近日&#xff0c;天津市道本科技有限公司&#xff08;以下简称“道本科技”&#xff09;中标世界500强中国中信集团有限公司&#xff08;以下简称“中信集团”&#xff09;风险管理应用三期建设项目。 作为金融与实业并举的综合性跨国企业集团&#xff0c;中信集团已连续12年入…

虾皮在线定价工具:知虾轻松制定有竞争力的价格策略

在如今的电商市场中&#xff0c;如何设定合适的商品价格是卖家们面临的一个重要问题。为了帮助卖家解决这个难题&#xff0c;虾皮&#xff08;Shopee&#xff09;提供了一款在线定价工具。通过这个工具&#xff0c;您可以更轻松地为您的商品制定有竞争力的价格策略&#xff0c;…

pytest接口自动化测试框架搭建的全过程

一. 背景 Pytest目前已经成为Python系自动化测试必学必备的一个框架&#xff0c;网上也有很多的文章讲述相关的知识。最近自己也抽时间梳理了一份pytest接口自动化测试框架&#xff0c;因此准备写文章记录一下&#xff0c;做到尽量简单通俗易懂&#xff0c;当然前提是基本的py…

Web漏洞-XSS绕过和pikachu靶场4个场景(三)

★★实战前置声明★★ 文章中涉及的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与学习之用&#xff0c;读者将其信息做其他用途&#xff0c;由用户承担全部法律及连带责任&#xff0c;文章作者不承担任何法律及连带责任。 1、XSS漏洞挖掘与绕过 1.1、XSS漏洞挖掘 数据…

爆款开放式耳机哪一款性价比最高?3款热门机型推荐,小白速看

随着生活水平的提升&#xff0c;越来越多的人对蓝牙耳机的需求不再局限于简单的音乐欣赏。他们对耳机的要求越来越高&#xff0c;包括音质表现、舒适度、环境感知等方面也有极大的期待&#xff0c;正是因为这样&#xff0c;开放式耳机应运而生。 身为一个数码测评小博主&#x…

阻抗控制下机器人接触刚性环境振荡不稳定进行阻抗调节

阻抗接触 刚性环境为ke10000 虚拟阻抗为&#xff1a;kd100&#xff0c;bd10&#xff0c;md1 虚拟阻抗为&#xff1a;kd100&#xff0c;bd10&#xff0c;md5 虚拟阻抗为&#xff1a;kd100&#xff0c;bd10&#xff0c;md10 性能滤波函数的Bode图&#xff1a; bode(1e5/(0.000…

最高性能、最低错误率!一年沉寂,IBM王者归来

周一&#xff0c;国际商业机器公司&#xff08;IBM&#xff09;发布了首台量子计算机&#xff0c;它拥有1000多个量子比特&#xff08;相当于普通计算机中的数字比特&#xff09;。但该公司表示&#xff0c;现在它将转变思路&#xff0c;专注于提高机器的抗错能力&#xff0c;而…

Android12 WIFI 无法提供互联网连接

平台 RK3588 Android 12 问题描述 ConnectivityService是Android系统中负责处理网络连接的服务之一。它负责管理设备的网络连接状态&#xff0c;包括Wi-Fi、移动数据、蓝牙等。 在Android系统中&#xff0c;ConnectivityService提供了一些关键功能&#xff0c;包括但不限于…

RocketMQ详解

目录 1、RocketMQ 介绍1.1、RocketMQ 特点1.2 RocketMQ优势 2 RocketMQ基本概念2.1 NameServer2.1.1 NameServer作用2.1.2 高可用保障 2.2 Broker2.2.1 部署方式2.2.1.1 单 Master2.2.1.2 多 Master2.2.1.3 多 Master 多 Slave&#xff08;异步复制&#xff09;2.2.1.4 多 Mast…
最新文章