当前位置: 首页 > news >正文

【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就会有智能提示&#xff0c;Tab就自动生成好了"body": ["<template>"," <…...

RFID超高频读写器的特点和应用

RFID读写器根据不同的工作频段可以分为高频读写器和超高频读写器&#xff0c;高频读写器通常在13.56Mhz频段工作&#xff0c;超高频读写器一般在860-960M Hz频段工作。下面我们就来为大家详细介绍一下&#xff0c;超高频读写器的特点和实际应用。 超高频读写器的工作原理 超高频…...

诡异事件:开发的安卓摄像头应用突然不能保存图片,回滚代码都查不出来

昨天对摄像头应用进行了大规模修改&#xff0c;在一个工程中&#xff0c;同时编译两个app。一番辛苦工作之后&#xff0c;成功。进行了测试&#xff0c;发现诡异的事情&#xff1a;照相无法保存&#xff01; 那怎么办&#xff1f;赶紧增加搞权限&#xff0c;没用。 逐个版本回滚…...

validator库的使用详解

目录 基本使用前言请求模型的定义编写接口及测试 翻译校验错误提示信息自定义错误提示信息的字段名自定义校验规则常见的参数校验字段 基本使用 前言 在做API开发时&#xff0c;需要对请求参数的校验&#xff0c;防止用户的恶意请求。例如日期格式&#xff0c;用户年龄&#x…...

ADS版图中连接提示线设置

ADS版图连接提示线设置 简述solve 简述 在ADS版中连接提示线设置&#xff0c;如下图1所示&#xff0c;有点类似于AD中“金线”&#xff0c;提示同一网络的焊盘&#xff0c;但在ads中&#xff0c;是产生了同一层的wire&#xff0c;证据如图2所示。如果没有设置的话&#xff0c;…...

【MySQL】内置函数——数学函数+其他函数

文章目录 一. 数字函数二. 其他函数 一. 数字函数 函数名称描述abs()绝对值函数bin()十进制转换二进制hex()转换成十六进制conv(number,from_base,to_base)将number从from_base转换成to_base进制ceiling()向上取整floor()向下取整format(number,decimal_places)格式化&#xf…...

Ubuntu 23.10 Beta 镜像开放下载

导读Canonical放出了 Ubuntu 23.10 Beta 镜像&#xff0c;此外 Edubuntu、Kubuntu、Lubuntu、Ubuntu Budgie、Ubuntu Cinnamon、Ubuntu Kylin、Ubuntu MATE、Ubuntu Studio、Ubuntu Unity 和 Xubuntu 等风味版本也同步放出镜像。 近日消息&#xff0c;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前装供应商比拼硬核能力

作为汽车智能座舱人机交互的新配置之一&#xff0c;HUD&#xff08;抬头显示&#xff09;市场在经历一波快速增长周期后&#xff0c;进入调整阶段。 本周&#xff0c;高工智能汽车研究院发布数据显示&#xff0c;2023年8月&#xff0c;中国市场&#xff08;不含进出口&#xff…...

XXE漏洞复现实操

文章目录 一、漏洞原理二、验证payload三、没有回显时的验证四、漏洞特征五、读取文件六、Base64加密读取七、端口检测八、使用php检测端口九、dtd外部实体读取文件十、Xxe漏洞防御 一、漏洞原理 (1)XXE漏洞全称XML External Entity Injection&#xff0c;即xmI外部实体注入漏…...

github创建个人网页登录后404无法显示的问题

1.首先必须要有内容&#xff0c;默认是会找index.html文件&#xff0c;找不到该文件会找readme.md文件&#xff0c;也就是说最简单的方法是&#xff0c;创建了与用户名同名的repository后username.github.io后&#xff0c;添加一个readme.md文件&#xff0c;得在readme里打点字…...

MySQL——源码安装教程(初版)

MySQL 一、MySQL的安装1、RPM2、二进制3、源码 二、源码安装方式三、安装过程1、上传源码包2、解压当前文件并安装更新依赖3、对MySQL进行编译安装 一、MySQL的安装 首先这里我来介绍下MySQL的几种安装方式&#xff1a; 一共三种&#xff0c;RPM安装包、二进制包安装以及源码安…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...