MySQL索引事务(一)

1、索引

1.1、概念

索引相当于一种特殊文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引类型,各类索引各自的结构实现。

1.2、作用

*通俗来讲,索引就相当于是我们的书本目录,为了提高查询效率

*索引本身也要占用一定的存储空间,就像书本目录也要占页数一样,也要组织数据

*通过索引可以快速定位目标记录的位置

 1.3、使用场景

要考虑对数据库表的某列或某几列创建索引,需要考虑一下几点:

*数据量比较大,且经常对这些列进行条件查询。

*该数据库表的插入操作,及对这些列的修改操作频率较低。

*索引会占用额外的磁盘空间

满足以上条件时,考虑对表中的这些字段创建索引,以提高查询效率。

反之,如果非条件查询列,或经常做修改、插入操作,或磁盘空间不足时,不考虑创建索引

1.4、使用

创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)时,会自动创建对应列的索引

*查看索引

show index from 表名;

 示例:查看学生表已有的索引

show index from student;

 *创建索引

对于非主键、非唯一约束、非外键的字段,可以创建普通索引

create index 索引名 on 表名(字段名);

示例:创建班级表中,name字段的索引

create index idex_classes_name on classes(name);

 *删除索引

drop index 索引名 on 表名;

示例:删除班级表中的name字段的索引

drop index idex_classes_name on classes; 

 1.5、示例

-- 创建用户表
 DROP TABLE IF EXISTS test_user;
 CREATE TABLE test_user (
                       id_number INT,
                       name VARCHAR(20) comment '姓名',
                       age INT comment '年龄',
                       create_time timestamp comment '创建日期'
);

准备测试数据,批量插入用户数据(操作耗时较长大约十分钟+)

-- 构建一个8000000条记录的数据
-- 构建的海量表数据需要有差异性,所以使用存储过程来创建, 拷贝下面代码就可以了,暂时不用理解
-- 产生名字

 drop function if exists rand_name;
 delimiter $$
 create function rand_name(n INT, l INT)
 returns varchar(255)
 begin
     declare return_str varchar(255) default '';
     declare i int default 0;
     while i < n do
             if i=0 then
                   set return_str = rand_string(l); 

             else
                   set return_str =concat(return_str,concat(' ', rand_string(l)));
            end if;
            set i = i + 1;
            end while;
       return return_str;
       end $$
 delimiter ;


-- 产生随机字符串
 drop function if exists rand_string;
 delimiter $$
 create function rand_string(n INT)
 returns varchar(255)
 begin
     declare lower_str varchar(100) default
         'abcdefghijklmnopqrstuvwxyz';
     declare upper_str varchar(100) default
         'ABCDEFJHIJKLMNOPQRSTUVWXYZ';
     declare return_str varchar(255) default '';
     declare i int default 0;
     declare tmp int default 5+rand_num(n);
     while i < tmp do
        if i=0 then
              set return_str
 =concat(return_str,substring(upper_str,floor(1+rand()*26),1));
        else
              set return_str
 =concat(return_str,substring(lower_str,floor(1+rand()*26),1));
        end if;
        set i = i + 1;
        end while;
      return return_str;
      end $$
 delimiter ;
-- 产生随机数字

 drop function if exists rand_num;
 delimiter $$
 create function rand_num(n int)
 returns int(5)
 begin
     declare i int default 0;
     set i = floor(rand()*n);
 return i;
 end $$
 delimiter ;
-- 向用户表批量添加数据


 drop procedure if exists insert_user;
 delimiter $$
 create procedure insert_user(in start int(10),in max_num int(10))
 begin
 declare i int default 0;
      set autocommit = 0; 
      repeat
            set i = i + 1;

            insert into test_user values ((start+i) ,rand_name(2,
5),rand_num(120),CURRENT_TIMESTAMP);
           until i = max_num
 end repeat;
 commit;
 end $$
 delimiter ;
-- 执行存储过程,添加8000000条用户记录


call insert_user(1, 8000000);

查询id_number为778899的用户信息

-- 耗时较长3.75s

select * from test_user where id_number=778899; 

 

可以使用explain来进行查看SQL的执行

 explain select * from test_user where id_number=778899;

 

为提供查询速度,创建id_number字段的索引

create index idx_test_user_id_number on test_user(id_number);

换一个身份证号查询,并比较执行时间

select * from test_user where id_number=556677;

 

 这样加入了索引之后,查询效率就会大大提高

 使用explain来进行查看SQL的执行

explain select * from test_user where id_number=556677;

 

 

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

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

相关文章

[LeetCode周赛复盘] 第 348场周赛20230604

[LeetCode周赛复盘] 第 348场周赛20230604 一、本周周赛总结6462. 最小化字符串长度1. 题目描述2. 思路分析3. 代码实现 6424. 半有序排列1. 题目描述2. 思路分析3. 代码实现 6472. 查询后矩阵的和1. 题目描述2. 思路分析3. 代码实现 6396. 统计整数数目1. 题目描述2. 思路分析…

echarts的y轴数据显示过长占不下,内容截取,鼠标hover上去显示全部

初始效果&#xff1a; 优化后的效果&#xff1a; 优化点&#xff1a;控制了y轴显示字数&#xff0c;鼠标hover上去显示全部 主要实现思路参考了这位同学的文章&#xff1a;https://www.cnblogs.com/liuboren/p/9040622.html 我是用vue实现的&#xff0c;因为我需要一个页面中…

go调试工具-delve

go调试工具-delve 简介 go debug工具&#xff0c;专门为go开发的调试工具&#xff0c;并且采用go语言开发&#xff0c;支持多平台。 官网&#xff1a;https://github.com/go-delve/delve 官网有详细的手册&#xff0c;学习起来很方便 快速开始 安装 我本地的go版本 官方…

QGIS 对 GeoJson 文件数据进行压缩

项目场景 地图开发&#xff0c;友商提供的是边界Shapefile文件&#xff0c;文件比较大&#xff0c;例如某个文件就 29.2 M &#xff0c;这么大的数据&#xff0c;在echarts 上显示地图&#xff0c;前端会很卡&#xff0c;特别是有地图下钻的时候&#xff0c;体验很不好&#x…

Window winget 包管理工具安装踩坑记录

一、简介 想在 window 上安装一个好用的包管理工具&#xff0c;mac 上用 homebrew, window 则考虑再三&#xff0c;使用官方提供的 winget。 winget 官方使用文档。 二、安装流程与踩坑记录 按 win x&#xff0c;选择 Powershell&#xff08;管理员&#xff09; 方式打开 c…

mysql数据类型有哪几种

Mysql支持的多种数据类型主要有&#xff1a;数值数据类型、日期/时间类型、字符串类型。 整数 浮点数&定点数 注&#xff1a;定点数以字符串形式存储&#xff0c;对精度要求高时使用decimal较好&#xff1b;尽量避免对浮点数进行减法和比较运算。 时间/日期类型 字符串类型…

网格搜索:Python遍历网格中每个点

遍历网格中每个点 1. 问题描述2. Python实现2.1 网格参数初始化2.2 遍历赋值2.3 矩阵赋值1. 问题描述 最近需要实现一个对矩阵赋值并对矩阵表示的网格参数进行测试的任务,假设网格的长宽均为k,待搜索的两个参数是Pitch 和 Yaw,存在两个列表中。现在需要将网格上不同参数设置…

Redis实战14-分布式锁基本原理和不同实现方式对比

在上一篇文章中&#xff0c;我们知道了&#xff0c;当在集群环境下&#xff0c;synchronized关键字实现的JVM级别锁会失效的。那么怎么解决这个问题呢&#xff1f;我们可以使用分布式锁来解决。本文咱们就来介绍分布式锁基本原理以及不同实现方式对比。 我们先来回顾&#xff…

IMX6ULL裸机篇之I2C实验-硬件原理图

一. I2C 实验简介 I2C实验&#xff0c;我们就来学习如何使用 I.MX6U 的 I2C 接口来驱动 AP3216C&#xff0c;读取 AP3216C 的传感器数据。 AP3216C是一个三合一的环境光传感器&#xff0c;ALSPSIRLED&#xff0c;ALS是环境光&#xff0c;PS是接近传感器&#xff0c;IR是红外L…

若依之权限处理

若依之权限处理 若依前后端不分离版本使用的是shiro进行权限控制&#xff0c;本文主要是对shiro在若依中的使用进行分析。 RBAC权限模型 RBAC是指基于角色的访问控制。其基本思想是&#xff0c;对系统的各种权限不是直接授予具体的用户&#xff0c;而是在用户集合与权限集合…

通过python采集关键字搜索1688工厂数据接口,1688工厂数据接口,1688API接口

1688是一个行业网站&#xff0c;主要提供中小型批发和生产商的信息&#xff0c;是中国供应商向全球采购商展示其产品的平台。在1688上&#xff0c;可以找到许多工厂和制造商的信息&#xff0c;包括公司名称、地址、联系人、联系方式、主要产品等。 采集1688工厂数据可以帮助采…

PDCCH monitoring capability

欢迎关注同名微信公众号“modem协议笔记”。 前段时间看search space set group (SSSG) switching相关内容时&#xff0c;注意到R17和R16的描述由于PDCCH monitoring capability的变化&#xff0c;内容有些不一样。于是就顺带看了下R16 R17PDCCH monitoring capability的内容。…

实战:单点登录的两种实现方式,附源码

最近工作有点忙&#xff0c;好久没更新文章了&#xff0c;正好这两天在整理单点登陆相关的文档&#xff0c;今天趁着小孩睡着了&#x1f92b;&#xff0c;赶紧码一篇实战文交差。 概念 单点登录&#xff08;Single Sign-On&#xff0c;SSO&#xff09;是一种身份验证服务&…

【Mysql】InnoDB 中 B+ 树索引的注意事项

一、根页面万年不动 在之前的文章里&#xff0c;为了方便理解&#xff0c;都是先画存储用户记录的叶子节点&#xff0c;然后再画出存储目录项记录的内节点。 但实际上 B 树的行成过程是这样的&#xff1a; 每当为某个表创建一个 B 树索引&#xff0c;都会为这个索引创建一个根…

单例模式C++实现和观察者模式C++实现

目录 1、单例模式介绍 2、单例代码实现 2.1 static介绍 2.2 C中static的三种用法&#xff1a; &#xff08;1&#xff09;静态局部变量 &#xff08;2&#xff09;静态成员变量 &#xff08;3&#xff09;静态成员函数 3、观察者模式介绍 4、观察者代码实现 1、单例模…

2023年十大最佳自动化测试工具(建议收藏)

Best Automation Testing Tools for 2023 对更快交付高质量软件&#xff08;或"快速质量"&#xff09;的需求要求组织以敏捷&#xff0c;持续集成&#xff08;CI&#xff09;和DevOps方法论来寻找解决方案。测试自动化是这些方面的重要组成部分。最新的《 2018-2019…

使用koa2搭建后端服务器

目录 第一步 第二步 第三步 第四步 第五步 流程说明 1.配置连接数据库 2.添加Schema模型 3.配置路由接口 第一步 npm i -g koa-generator 第二步 koa2 server 第三步 cd server && npm install 第四步 将服务器拖进编译器运行 npm run dev 在浏览器输入…

迅为RK3568开发板2800页手册+220集视频

iTOP-3568开发板采用瑞芯微RK3568处理器&#xff0c;内部集成了四核64位Cortex-A55处理器。主频高达2.0Ghz&#xff0c;RK809动态调频。集成了双核心架构GPU&#xff0c;ARM G52 2EE、支持OpenGLES1.1/2.0/3.2OpenCL2.0、Vulkan 1.1、内高性能2D加速硬件。 内置NPU 内置独立NP…

SpringBoot生成RESTful API文档

由于我一开始学习的SpringBoot是3以上版本&#xff0c;所以我这里用到的也是支持和SpringBoot3能够整合的SpringDoc 这里先说一下&#xff0c;其实SpringDoc就是Swagger3版本&#xff0c;我一开始整合的2版本&#xff0c;比较麻烦况且最后SpringBoot程序都启动不了了&#xff0…

信息竞赛笔记(2)––快速幂

目录 快速幂 定义 分析 代码 递归实现 非递归实现(通用方法) 模意义下取幂 快速幂 定义 快速幂,二进制取幂(Binary Exponentiation,也称平方法),是一个在的时间内计算的小技巧&#xff0c;而暴力的计算需要的时间。 这个技巧也常常用在非计算的场景&#xff0c;因为它可…