【SQL】MySQL中的索引,索引优化
索引是存储引擎用来快速查询记录的一种数据结构,按实现方式主要分为Hash索引和B+树索引。
按功能划分,主要有以下几类

单列索引指的是对某一列单独建立索引,一张表中可以有多个单列索引
1. 单列索引 - 普通索引
- 创建索引(关键字index):
create table student(id int primary key,card_id varchar(20),name varchar(20),index index_name(name) -- 1.创建表时,给name列创建普通索引
);
-- 2.创建表后,添加普通索引
create index index_name on student(name);
-- 3.修改表结构,添加普通索引
alter table student add index index_name(name);
- 查看索引(通用操作):
show index from student;
- 删除索引(通用操作,仅需修改索引名字):
drop index index_name on student;
-- 或
alter table student drop index index_name;
2. 单列索引 - 唯一索引
与普通索引的区别在于唯一索引列的值必须唯一,但可以有空值
- 创建索引(关键字unique):
create table student(id int primary key,card_id varchar(20),name varchar(20),unique index_card_id(card_id) -- 1.创建表时,给card_id列创建唯一索引
);
-- 2.创建表后,添加唯一索引
create unique index index_card_id on student(card_id);
-- 3.修改表结构,添加唯一索引
alter table student add unique index_card_id(card_id);
3. 单列索引 - 主键索引
MySQL会在主键列上自动创建索引,就是主键索引。(联合主键也会自动创建对应的组合索引)
主键列唯一且不为空,所以主键索引是特殊的唯一索引。
4. 组合索引(复合索引)
组合索引指将多个列合在一起创建索引,可以创建组合普通索引,组合唯一索引(某一列值可以重复,但两列合起来不能重复)。
- 创建组合索引
-- 添加组合普通索引
create index index_card_id on student(id,card_id);
-- 添加组合唯一索引
create unique index index_card_id on student(id,card_id);
组合索引的使用符合最左原则,例如上面的索引,单独查id可以用到组合索引,单独查card_id用不到组合索引。
5. 全文索引(仅了解)
- 全文索引用来查找文本中的关键字,类似于like+%模糊匹配
- 关键字为fulltext,在大量文本数据查找时,速度比like+%快N倍
- 只有char、varchar、text及其系列才可以建全文索引
- 全文索引有两个变量,最小搜索长度和最大搜索长度,只有长度在最小搜索长度~最大搜索长度的文本,才能被索引查询。
-- 添加组合普通索引
alter table t_article add fulltext index_content(content);
-- 添加组合唯一索引
create fulltext index index_content on t_article(content);
- 使用全文索引查询,使用match和against关键字,不能用like
-- match后跟字段,against后跟要模糊匹配的文本
select * from t_article where match(content) against('you');
-- 查询结果与下面语句相同
select * from t_article where content like '%you%';
6. 空间索引(使用很少,仅了解)
空间索引是对空间数据类型的字段建立的索引,MySQL中的空间数据类型有以下4种
| 空间数据类型 | 含义 | 说明 |
|---|---|---|
| Geometry | 空间数据 | 任何一种空间类型 |
| Point | 点 | 坐标值 |
| LineString | 线 | 一系列点连接而成 |
| Polygon | 多边形 | 多条线组成 |
- 添加空间索引(关键字spatial)
create table shop_info(id int primary key auto_increment comment 'id',shop_name varchar(64) not null comment '门店名称',geom_point geometry not null comment '经纬度',spatial key geom_index(geom_point) -- 添加空间索引
);
索引内部原理
- 索引通常以索引文件的形式存储在磁盘中
- 索引查找要产生磁盘I/O消耗,而磁盘I/O的消耗远高于内存I/O,所以索引的数据结构要尽量减少磁盘I/O的操作次数
- Hash索引
通过字段值计算出hash值(可看作是存储地址,类似于书本中的页码),直接定位数据

- B+树索引
二叉树 -> 平衡二叉树 -> B树 -> B+树
二叉树

平衡二叉树

B树(B-Tree)
PS:没有B减树,只有B树,英文就是B-Tree,-只是为了分隔B和Tree
数据可视化网址https://www.cs.usfca.edu/~galles/visualization/BTree.html
B+树
数据可视化网址https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html
MyISAM存储引擎使用B+树作为索引结构,叶节点的data域存放的是数据的地址。
InnoDB存储引擎使用B+树作为索引结构,叶节点的data域存放的是数据,比MyISAM效率高一点,但占磁盘空间。
相关文章:
【SQL】MySQL中的索引,索引优化
索引是存储引擎用来快速查询记录的一种数据结构,按实现方式主要分为Hash索引和B树索引。 按功能划分,主要有以下几类 单列索引指的是对某一列单独建立索引,一张表中可以有多个单列索引 1. 单列索引 - 普通索引 创建索引(关键字i…...
uniapp 跳转到指定位置
this.$router.push({name: Demo,params: {id: 123} })这样就实现了页面的跳转,并且将参数id传递给了Demo组件。 如果需要跳转到当前页面的不同位置,我们可以使用锚点来实现。锚点是一个HTML元素的标识符,可以用于定位和跳转到该元素。例如&a…...
基于java的图书馆预约座位系统的设计与实现(部署+源码+LW)
项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于java的图书馆预约座…...
golang 拉取 bitbucket.org 私有库
以 bitbucket.org 平台和mac电脑为例 前置条件私库需要给你账号权限,可拉取的权限,否则无法进行正常拉取 我们采用ssh方式,需要在本地生成对应的 rsa 的公钥和私钥,将公钥配置如下图: 在 .ssh/config 写入你的配置 H…...
Sub-1G射频收发器soc芯片 UM2080F32 低功耗 32 位 IoTP
UM2080F32是基于 ARM Cortex M0 内核的超低功耗、高性能的、单片集成 (G)FSK/OOK 无线收发机的 32 位SOC 芯片。 UM2080F32 工作于200MHz~960MHz 范围内,支持灵活可设的数据包格式,支持自动应答和自动重发功能,支持跳频操作,支持 …...
国际减灾日 | 智慧减灾——百分点科技的数据科学视角
国际减轻自然灾害日简称“国际减灾日”,由联合国于1989年设立,旨在关注全球灾害风险,呼吁各国政府、组织和个人积极参与减灾工作,以保护人民生命财产安全。今年10月13日是第34个国际减灾日,主题为“共同打造有韧性的未…...
ChatGLM流式输出的报错修复
ChatGLM中的openai_api.py中的代码如下: # codingutf-8 # Implements API for ChatGLM2-6B in OpenAIs format. (https://platform.openai.com/docs/api-reference/chat) # Usage: python openai_api.py # Visit http://localhost:8000/docs for documents.import …...
HDLbits: ece241 2013 q12 // Exams/m2014 q4k
两道题目,有一样的问题: 第一道:ece241 2013 q12 下面的代码错误,一直没看出来哪里有问题: module top_module (input clk,input enable,input S,input A, B, C,output Z ); reg [7:0] q;dff dff_1(clk,enable,S,q[…...
vue3模板-vscode设置(语法糖)
选择菜单里的 文件 > 首选项 > 用户代码片段 vscode模板 {"Print to conaole":{"prefix": "v-ts", //在新建立的页面中输入C就会有智能提示,Tab就自动生成好了"body": ["<template>"," <…...
RFID超高频读写器的特点和应用
RFID读写器根据不同的工作频段可以分为高频读写器和超高频读写器,高频读写器通常在13.56Mhz频段工作,超高频读写器一般在860-960M Hz频段工作。下面我们就来为大家详细介绍一下,超高频读写器的特点和实际应用。 超高频读写器的工作原理 超高频…...
诡异事件:开发的安卓摄像头应用突然不能保存图片,回滚代码都查不出来
昨天对摄像头应用进行了大规模修改,在一个工程中,同时编译两个app。一番辛苦工作之后,成功。进行了测试,发现诡异的事情:照相无法保存! 那怎么办?赶紧增加搞权限,没用。 逐个版本回滚…...
validator库的使用详解
目录 基本使用前言请求模型的定义编写接口及测试 翻译校验错误提示信息自定义错误提示信息的字段名自定义校验规则常见的参数校验字段 基本使用 前言 在做API开发时,需要对请求参数的校验,防止用户的恶意请求。例如日期格式,用户年龄&#x…...
ADS版图中连接提示线设置
ADS版图连接提示线设置 简述solve 简述 在ADS版中连接提示线设置,如下图1所示,有点类似于AD中“金线”,提示同一网络的焊盘,但在ads中,是产生了同一层的wire,证据如图2所示。如果没有设置的话,…...
【MySQL】内置函数——数学函数+其他函数
文章目录 一. 数字函数二. 其他函数 一. 数字函数 函数名称描述abs()绝对值函数bin()十进制转换二进制hex()转换成十六进制conv(number,from_base,to_base)将number从from_base转换成to_base进制ceiling()向上取整floor()向下取整format(number,decimal_places)格式化…...
Ubuntu 23.10 Beta 镜像开放下载
导读Canonical放出了 Ubuntu 23.10 Beta 镜像,此外 Edubuntu、Kubuntu、Lubuntu、Ubuntu Budgie、Ubuntu Cinnamon、Ubuntu Kylin、Ubuntu MATE、Ubuntu Studio、Ubuntu Unity 和 Xubuntu 等风味版本也同步放出镜像。 近日消息,Canonical 放出了 Ubuntu …...
mybatispagehelp嵌套分页处理
1.定义嵌套vo类 /*** 用户中心,我的订单列表VO*/ public class MyOrdersVO {private String orderId;private Date createdTime;private Integer payMethod;private Integer realPayAmount;private Integer postAmount...
增速波动!W「下」AR「上」!HUD前装供应商比拼硬核能力
作为汽车智能座舱人机交互的新配置之一,HUD(抬头显示)市场在经历一波快速增长周期后,进入调整阶段。 本周,高工智能汽车研究院发布数据显示,2023年8月,中国市场(不含进出口ÿ…...
XXE漏洞复现实操
文章目录 一、漏洞原理二、验证payload三、没有回显时的验证四、漏洞特征五、读取文件六、Base64加密读取七、端口检测八、使用php检测端口九、dtd外部实体读取文件十、Xxe漏洞防御 一、漏洞原理 (1)XXE漏洞全称XML External Entity Injection,即xmI外部实体注入漏…...
github创建个人网页登录后404无法显示的问题
1.首先必须要有内容,默认是会找index.html文件,找不到该文件会找readme.md文件,也就是说最简单的方法是,创建了与用户名同名的repository后username.github.io后,添加一个readme.md文件,得在readme里打点字…...
MySQL——源码安装教程(初版)
MySQL 一、MySQL的安装1、RPM2、二进制3、源码 二、源码安装方式三、安装过程1、上传源码包2、解压当前文件并安装更新依赖3、对MySQL进行编译安装 一、MySQL的安装 首先这里我来介绍下MySQL的几种安装方式: 一共三种,RPM安装包、二进制包安装以及源码安…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
