MySQL从入门到高级 --- 10.索引

文章目录

    • 第十章:
      • 10.索引
        • 10.1 分类
        • 10.2 创建索引
          • 10.2.1 单列索引 - 普通索引
          • 10.2.2 查看索引
          • 10.2.3 删除索引
          • 10.2.4 单列索引 - 唯一索引
          • 10.2.5 单列索引 - 主键索引
          • 10.2.6 组合索引
        • 10.3 全文索引
          • 10.3.1 概述
          • 10.3.2 使用
        • 10.4 空间索引
          • 10.4.1 操作
        • 10.5 原理
          • 10.5.1 相关算法
            • Hash算法
            • 二叉树
            • 平衡二叉树
            • BTREE树
            • B-Trees树
            • B+Trees树
        • 10.6 MyISAM引擎使用B+Tree
        • 10.7 InnoDB引擎使用B+Tree
        • 10.8 索引特点
        • 10.9 使用原则

第十章:

10.索引

  • 索引通过某种算法,构建出一个数据模型,用来快速查找在某个列中有一特定值的行,若表中查询的列有一个索引,MySQL能快速到达一个位置去搜索数据文件,而不必查看所有数据,将会节省很多时间
10.1 分类
  • Hash索引

  • B+Tree索引

Hash

在这里插入图片描述

B+Tree

在这里插入图片描述

功能划分

在这里插入图片描述

  • 单列索引:一个索引包含单个列,但一个表中可有多个单列索引

  • 普通索引:允许在定义索引的列中插入重复值和空值,没太多限制

10.2 创建索引
10.2.1 单列索引 - 普通索引

语法

-- 法1 创建表时直接指定
create database mydb12;
use mydb12;
create table stu(sid int primary key,name varchar(20),gender varchar(20),age int,score double,index index_name(name) -- name列创建索引
);-- 法2 直接创建
-- create index indexname on tablename(columnname);
create index index_gender on stu(gender);-- 法3 修改表结构
-- alter table tablename add index index_name(columnname);
alter table stu add index index_age(age);

在这里插入图片描述

10.2.2 查看索引

在这里插入图片描述
在这里插入图片描述

10.2.3 删除索引

语法

drop index 索引号 on 表名

alter table 表名 drop index 索引名

drop index index_gender on stu;
alter table stu drop index index_name;
10.2.4 单列索引 - 唯一索引
  • 索引列的值必须唯一,但允许有空值

语法

-- 法1 创建表时直接指定
create table stu2(sid int primary key,id varchar(20),name varchar(20),gender varchar(20),age int,score double,unique index_id(id) -- id列创建索引
);-- 法2 直接创建
-- create unique index index_name on tablename(columnname);
create unique index index_gender on stu2(gender);-- 法3 修改表结构
-- alter table tablename add unique index_name(columnname);
alter table stu2 add unique index_age(age);
10.2.5 单列索引 - 主键索引
  • 一种特殊的唯一索引,在创建表时,会自动在主键列上建立一个索引

在这里插入图片描述

10.2.6 组合索引
  • 也被称为复合索引,在建立索引时使用多个字段。使用复合最左原则

语法

create index indexname on table_name(column(length, column2(length));

create index index_age_score on stu2(age,score);

操作:

select * from stu2 where score = 88; -- 1
select * from stu2 where age = 20 ; -- 2
select * from stu2 where age = 20 and score = 88; -- 3
select * from stu2 where score = 88 and age = 20; -- 4
-- 2、3、4因为条件里必须包含索引前面的字段才能进行匹配,可用到索引index_age_score
-- 3、4相比where条件顺序不一样,在mysql中它们等价
10.3 全文索引
10.3.1 概述

关键字:fulltext

作用:查找文本中的关键字

使用like + %可实现模糊匹配,在大量数据里,全文索引比它快很多倍,不是一个量级,但全文索引精度可能存在问题

变量

  • 最小搜索长度

  • 最大搜索长度

搜索时,词语需在最小搜索长度和最大搜索长度的区间内

-- 查看这两个变量的默认值
show variables like '%ft%';
10.3.2 使用

关键字:match、against

语法:match(col1, col2, …) against(expr [search_modifier])

create table article(id int primary key auto_increment,title varchar(255),content varchar(999),writing date,fulltext(content) -- 创建全文索引
);-- 添加全文索引
create fulltext index index_content on article(content);-- 修改表结构添加全文索引
alter table article add fulltext index_content(content);
drop table article;
insert into article values(null,'zoo', 'yesterday one zoo animal hav dog and cat', '2004-01-26');
insert into article values(null,'food', 'you one food hav milk you you and bread', '2004-02-16');insert into article values(null,"hair", "yesterday you one hair hav you short you",'2004-05-27');select * from article where match(content) against('yo'); -- 无
select * from article where match(content) against('you'); -- 有 
select * from article where content like '%you%';
10.4 空间索引
  • 空间索引是对空间数据类型的字段建立的索引

  • 创建空间索引的列,必须将其声明NOT NULL

  • 使用SPATIAL关键字进行扩展,使能够用于创建正规索引类型的语法创建空间索引

数据类型

  • GEOMETRY

  • POINT

  • LINESTRING

  • POLYGON

10.4.1 操作

在这里插入图片描述
在这里插入图片描述

10.5 原理

索引本身很大,不可能全部存储在内存中,索引往往以索引文件的形式存储磁盘上。查找过程要产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高很大,索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数。

10.5.1 相关算法

Data Structure Visualization (usfca.edu)

Hash算法

在这里插入图片描述

  • 优点:通过字段值计算的hash值,定位数据快

  • 缺点:不能进行范围查找,散列表中的值是无序的,无法进行大小比较

二叉树

在这里插入图片描述

  • 特征:分为左子树、右子树和根节点,左子树比根节点值小,右子树比根节点值大

  • 缺点:有可能产生不平衡

平衡二叉树

在这里插入图片描述

特征

  • 左子树和右子树都是平衡二叉树

  • 左子树比中间值小, 右子树比中间值大

  • 左子树和右子树的深度之差的绝对值不超过1

缺点

  • 插入操作要旋转

  • 支持范围查询,但回旋查询效率较低

  • 树高度越高,查询效率会越慢

BTREE树
  • 目前大多数数据库系统及文件系统都采用B-Tree或B+Tree作为索引结构,Btree结构可有效解决之前相关算法所遇到的问题
B-Trees树

在这里插入图片描述

B+Trees树

在这里插入图片描述

10.6 MyISAM引擎使用B+Tree

在这里插入图片描述

10.7 InnoDB引擎使用B+Tree
  • 叶节点的data域存放数据,比MyISAM效率高一点,但比较占硬盘内存大小

在这里插入图片描述

10.8 索引特点

优点

  • 加快查询数据的速度

  • 显著减少查询时分组和排序的时间

  • 创建唯一索引,能保证数据库每一行数据的唯一

  • 实现数据的参考完整性方面,可加速表与表之间的连接

缺点

  • 随着数据量的增加,消耗时间也会增加

  • 需要占磁盘空间

  • 对数据表中数据进行增删改时,索引也要动态维护,降低了维护的速度

10.9 使用原则
  • 更新频繁的列不设索引

  • 数据量小的表不使用索引

  • 重复数据多的字段不设索引

  • 有限考虑对where和order by所涉及的列上建立索引

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch学习笔记:新冠肺炎X光分类

前言 目的是要了解pytorch如何完成模型训练 https://github.com/TingsongYu/PyTorch-Tutorial-2nd参考的学习笔记 数据准备 由于本案例目的是pytorch流程学习,为了简化学习过程,数据仅选择了4张图片,分为2类,正常与新冠&#xf…

Python爬虫实战:利用代理IP获取电商数据

文章目录 1.电商数据介绍2.爬取目标3.代理IP推荐4.准备工作4.1 模块安装4.2 代理IP获取 5.爬虫代码实战5.1分析网页5.1.1 获取cookie5.1.2 关键词分析5.1.3 翻页分析5.1.4 数据获取分析 5.2 发送请求5.3 提取数据5.4 保存数据5.5 完整源码5.6 数据分析六、总结 1.电商数据介绍 …

回收站清空的文件怎么恢复?8个方法公开(2024更新版)

“我太粗心了,刚想恢复部分回收站中误删的重要文件,一不小心把回收站清空了,现在还有什么方法可以恢复它们吗?” 在数字时代,电脑已经成为我们日常生活和工作中不可或缺的工具。然而,随着我们对电脑的依赖加…

linux经典定时任务

在使用时记得替换为自己的脚本路径。请在相应的脚本第一行加上#!/bin/bash,否则脚本在定时任务中无法执行。 1、在每天凌晨2点执行 0 2 * * * /bin/sh bashup.sh 2、每天执行两次 下面的示例命令将在每天上午5点和下午5点执行。您可以通过逗号分隔指定多个时间戳…

LeetCode:279.完全平方数

class Solution:def numSquares(self, n: int) -> int:dp[i for i in range(n1)]for i in range(2,n1):for j in range(1,int(i**(0.5))1):dp[i]min(dp[i],dp[i-j*j]1)return dp[-1]代码解释 初始化 DP 数组: dp [i for i in range(n1)] 这里,dp[i]…

【云原生】Kubernetes-----POD资源限制与探针机制

目录 引言 一、资源限制 (一)基本定义 (二)资源单位 1.CPU资源 2.内存资源 (三)请求与限制 (四)定义方式 1.编写yaml文件 2.查看资源情况 (五)资源…

构建智能化商场存包柜平台的数据结构设计

随着城市生活节奏的加快,人们对于便利的需求也越来越迫切。在城市中,商场存包柜平台成为了解决人们日常出行中行李存放问题的重要设施。为了更好地管理和运营这些存包柜,智能化商场存包柜平台的数据结构设计显得尤为关键。 一、需求分析与功能…

迷你手持小风扇哪个牌子质量好又实惠?这五款不踩雷推荐!

每年夏天,迷你手持小风扇作为消暑神器都会成为市场上的热销产品。然而,由于选购经验有限,许多消费者在面对众多品牌和型号时,往往难以判断哪个牌子的迷你小风扇既质量好又价格实惠。在追求性价比的同时,我们也不应忽视…

比例溢流阀的放大器找BEUEC

液压比例放大器的使用范围广泛,包括工业生产线、船舶液压系统等多个领域。BEUEC比例放大器是一种重要的液压系统组件,其作用是将微弱的液压信号放大,以实现对液压系统的精确控制。这种设备在多个行业中都有广泛的应用,特别是在需要…

Jenkins安装 :Aws EC2下Docker镜像安装

1 安装docker # 安装docker $ sudo yum install -y docker# 启动docker daemon $ sudo systemctl start docker# 用户加入docker组 $ sudo usermod -aG docker username 2 docker安装jenkins $ docker pull jenkins/jenkins:lts# 安装成功 $ docker images REPOSITORY …

[Algorihm][简单多状态DP问题][买卖股票的最佳时机含冷冻期][买卖股票的最佳时机含手续费]详细讲解

目录 1.买卖股票的最佳时机含冷冻期1.题目链接买卖股票的最佳时机含冷冻期2.算法原理详解3.代码实现 2.买卖股票的最佳时机含手续费1.题目链接2.算法原理详解3.代码实现 1.买卖股票的最佳时机含冷冻期 1.题目链接 买卖股票的最佳时机含冷冻期 2.算法原理详解 思路&#xff…

2024年上半年软件设计师试题及答案(回忆版)

目录 基础知识选择题案例题1.缺陷识别的数据流图2.球队、球员、比赛记录的数据库题3.用户、老师、学生、课程用例图4.算法题5.程序设计题 基础知识选择题 树的节点,度为4的有4个,度为3的有8个,度为2个有6个,度为1的有10个&#x…

深入解析内置模块OS:让你的Python代码更懂操作系统

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、OS模块简介与基础应用 二、文件与目录操作详解 三、OS模块的高级应用:双色…

Kubectl 的使用——k8s陈述式资源管理

一、kebuctl简介: kubectl 是官方的CLI命令行工具,用于与 apiserver 进行通信,将用户在命令行输入的命令,组织并转化为 apiserver 能识别的信息,进而实现管理 k8s 各种资源的一种有效途径。 对资源的增、删、查操作比较方便&…

基础IO用户缓冲区 、inode、硬软链接【Linux】

文章目录 用户缓冲区磁盘磁盘分区EXT2文件系统的存储方案 inode软链接硬链接 用户缓冲区 代码一&#xff1a; 1 #include<stdio.h>2 #include<unistd.h>3 #include<string.h> 4 int main()5 {6 const char * fstr &…

孜然多程序授权系统V2.0开源

源码介绍 孜然一款多程序授权系统&#xff0c;支持自定义权限价格/新增程序配置等支持自动生成授权代码在线签到在线充值多支付接口IP/域名云黑文章系统&#xff08;富文本编辑器&#xff09;卡密功能一键云黑&#xff08;挂个大马/一键黑页/一键删库/一键删源码&#xff09; …

ROS2入门21讲__第07讲__节点:机器人的工作细胞

目录 前言 通信模型 案例一&#xff1a;Hello World节点&#xff08;面向过程&#xff09; 运行效果 代码解析 创建节点流程 案例二&#xff1a;Hello World节点&#xff08;面向对象&#xff09; 运行效果 代码解析 创建节点流程 案例三&#xff1a;物体识别节点 …

民国漫画杂志《时代漫画》第24期.PDF

时代漫画24.PDF: https://url03.ctfile.com/f/1779803-1248635000-177187?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

GMSL2硬件设计V1.1

一、说明 GMSL(Gigabit Multimedia Serial Links),中文名称为千兆多媒体串行链路,是Maxim公司(现属于ADI)推出的一种高速串行接口,通过同轴电缆或屏蔽双绞线(STP)传输高速串行数据,用于汽车摄像头和显示器应用。GMSL2就是指ADI专有的第二代千兆多媒体串行链路技术,传输…

C++的哈希 哈希表 哈希桶

目录 Unordered系列关联式容器 什么是哈希 哈希表 闭散列 载荷因子α 扩容 查找 删除 字符串哈希算法 最终代码 开散列 插入 查找 删除 最终代码 完整代码 Unordered系列关联式容器 C98中&#xff0c;STL提供了底层为红黑树结构的一系列关联式容器&#xff0…