MYSQL学习笔记:索引

MYSQL学习笔记:索引

文章目录

  • MYSQL学习笔记:索引
    • 索引的分类
    • 索引的创建删除
    • 索引优化
    • B树索引
    • B+树
    • InnoDB主键和二级索引树
    • 聚集索引与非聚集索引
    • 哈希索引
    • INNODB的自适应哈希索引
    • 索引和慢查询

在这里插入图片描述

  • 用索引也是要涉及磁盘I/O的操作的
  • 索引也是一种数据结构,对某列建索引的时候都要进行一个排序的,这一列的文件有增加减少修改都是要涉及索引数据的改动操作的

在这里插入图片描述

索引的分类

物理上分为聚集索引和非聚集索引

  • 普通索引:数量不限,可以给任意普通字段创建普通索引,一张表的SQL查询只能用一个索引
  • 唯一性索引:使用UNIQUE修饰的字段,值不能重复,主键索引隶属于唯一性索引
  • 主键索引:使用PRIMARY KEY修饰的字段,会自动创建索引(MYISAM,innoDB(如果没设主键,INNODB会自动创建,因为数据和索引存在一起,没有索引没办法存储数据))
    • 单列索引 在一个字段上创建索引
  • 多列索引: 在表的多个字段上创建索引(uid+cid,多列索引必须使用第一个列才能用到多列索引,否则用不到)
  • 全文索引:使用FULLTEX修饰的字段可以设置全文索引,支支持char varchar和text类型字段,常用于较大的字符串类型上,可以提高查询速度

索引的创建删除

方法1:在建表的时候建立索引

CREATE TABLE index1(id INT,
name varchar(20),
sex enum ('male','famale'),
INDEX(id,name);

方法2:在已创建的表上创建索引

CREATE [UNIQUE] INDEX 索引名 ON 表名(属性名(length)[ASC|DESC]);
create index pwdindex on user(age);

删除索引:

DROP INDEX 索引名 ON 表名;

加索引后只扫一行:不管数据规模如何,花费的时间一样长
在这里插入图片描述

索引优化

  1. 给经常用作where过滤条件的字段加索引
  2. 给字符串创建索引索引值尽可能短,不然存储文件大,加载慢
  3. 如果过滤条件涉及类型转换或者用了mysql的函数调用表达式计算,就不能用索引了。
    在这里插入图片描述
    password是字符串类型,10000是默认INT类型,如果涉及类型转换或者用了mysql的函数就不能用索引了

B树索引

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果用m=500(一般取300~500)阶B树最多用----》3层:
在这里插入图片描述

最理想的情况是一次磁盘IO读取的磁盘块内容刚好存储在B树的一个节点中
在这里插入图片描述

B+树

为啥用B+树而不是B树
首先看B树的特点:

  1. 索引和数据分散在不同的节点上,离根节点近搜索快,离根节点远搜索就慢,花费的IO不平均,每一行搜索花费的时间也不平均
  2. 每一个非叶子节点上不仅仅要存储索引(key) 还要存索引所在哪一行的data数据。一个节点能存放索引的key的个数比只存储key的节点少得多
  3. B树很不方便进行范围搜索(例如搜索13~18的数据,既要搜索左子树也要搜索右子树),整表遍历看起来不方便

在这里插入图片描述

在这里插入图片描述
非叶子节点只存储key不存储data,每个节点存储的key个数更多,理论上来讲层数更低,搜索效率更高
叶子节点上存储了所有的key值和对应的data,搜索每个节点最后都要到叶子节点上。每一行搜索时间非常平均
叶子节点被串在了一个链表当中形成了一个有序链表,如果对所引树进行搜索只需要遍历有序链表即可。进行范围查询的时候,也可以直接遍历有序链表,效率更高

InnoDB主键和二级索引树

在这里插入图片描述
二级索引树
在这里插入图片描述
在这里插入图片描述
这也是为啥多列所引想要被用到必须用到第一列

聚集索引与非聚集索引

myisam
非聚集索引:
在这里插入图片描述
主键索引:
在这里插入图片描述
在这里插入图片描述

INNODB辅助索引与主键索引:

在这里插入图片描述

在这里插入图片描述

反之,innoDB的那种数据索引不分离的方式就算聚集索引

哈希索引

在这里插入图片描述
在这里插入图片描述
hash索引就是一个链式哈希表
在这里插入图片描述
特点:
在这里插入图片描述

INNODB的自适应哈希索引

在这里插入图片描述
原来是先找到二级索引,然后在通过二级索引找到主键再搜索得到数据页
现在通过一个hash索引直接找到数据页
在这里插入图片描述
自适应hash索引的维护也是要耗费性能的,不是所有情况下都可以提升二级索引的查询性能
在这里插入图片描述

在这里插入图片描述
索引学习漫画链接

索引和慢查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如何看更精确的时间:

在这里插入图片描述

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

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

相关文章

c语言day4 运算符 表达式 三大控制结构

1: 2: 输入一个年月日 计算这是这一年的第几天 17 int year,month,day;18 printf("请输入年份 月份 日期");19 scanf("%d %d %d",&year,&month,&day);20 int feb28;21 if(year%40&&year%1…

哈工大中文mistral介绍(Chinese-Mixtral-8x7B)

Chinese-Mixtral-8x7B基于Mistral发布的模型Mixtral-8x7B进行了中文扩词表增量预训练。扩充后的词表显著提高了模型对中文的编解码效率,并通过大规模开源语料对扩词表模型进行增量预训练,使模型具备了强大的中文生成和理解能力。 开源地址见https://gith…

前端-DOM树

dom树描述网页元素关系的一个专有名词,如html内包含了head、body,而head内包含meta、title、script等,body内包含div等元素;网页所有内容都在document里面,网页内容以树状形式排列,所以称之为dom树 dom树内…

centos服务配置springboot服务开机启动

在做后端服务运维时,经常遇到服务器重启时,需要移动一堆后端服务。服务器故障自动重启时,通常无人通知。把springboot服务的jar包配置开机启动太有必要了,虽然不是很复杂,这里记录一下太有必要了。 创建jar包启动和停…

看完这篇,终于理解如何制作产品使用说明书啦!

制作产品说明书是一项重要的任务,它不仅提供了产品的详细信息,还可以帮助用户正确地使用和维护产品,确保产品说明书的质量和可使用性。在制作产品说明书时,掌握注意事项,可以帮助你更加高效地制作产品说明书。以下是Lo…

lv20 QT主窗口

熟悉创建主窗口项目 1 QAction 2 主窗口 菜单栏:fileMenu menuBar()->addMenu(tr("&File")); 工具栏:fileToolBar addToolBar(tr("File")); 浮动窗:QDockWidget *dockWidget new QDockWidget(tr("Dock W…

基于Python3的数据结构与算法 - 06 topk问题

一、引入 问题&#xff1a;目前共有n个数&#xff0c;设计算法得到前k大的数。&#xff08;m<n&#xff09; 解决思路&#xff1a; 排序后切片&#xff1a;O(n*lognm) O(n*logn)排序LowB三人组&#xff1a;O(mn) 例如冒泡排序&#xff0c;交换m次&#xff0c;即可取前m…

uniapp 安装安卓、IOS模拟器并调试

一、安装Android模拟器并调试 1.下载并安装Android Studio。 2.创建简单project。 3.安装模拟器。 完成安卓模拟器的安装。 4.启动模拟器。 5.hbuilderx选择模拟器、运行。 点击刷新按钮后出现模拟器&#xff0c;勾选并运行。 6.调试。 在 HBuilderX 中&#xff0c;项目启…

如何将字体添加到 ONLYOFFICE 桌面编辑器8.0

作者&#xff1a;VincentYoung 为你写好的文字挑选一款好看的字体然而自带的字体列表却找不到你喜欢的怎么办&#xff1f;这只需要自己手动安装一款字体即可。这里教你在不同的桌面操作系统里的多种字体安装方法。 ONLYOFFICE 桌面编辑器 ONLYOFFICE 桌面编辑器是一款免费的办…

Java设计模式 | 七大原则之合成复用原则

基本介绍 合成复用原则&#xff08;Composite Reuse Principle&#xff09;尽量使用合成/聚合的方式&#xff0c;而不是使用继承 设计原则核心思想总结 找出应用中可能需要变化之处&#xff0c;把他们独立出来&#xff0c;不要和那些不需要变化的代码混在一起针对接口编程&…

HQYJ 2024-2-29 作业

作业&#xff1a; 编写链表&#xff0c;链表里面随便搞点数据 使用 fprintf 将链表中所有的数据&#xff0c;保存到文件中 使用 fscanf 读取文件中的数据&#xff0c;写入链表中 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <…

【Java程序设计】【C00323】基于Springboot的高校科研信息管理系统(有论文)

基于Springboot的高校科研信息管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的高校科研信息管理系统&#xff0c;本系统有管理员、学校管理员、科研人员三种角色&#xff1b; 管理员&#xff1a;首页、个…

【Unity实战】UGUI和Z轴排序那点事儿

如果读者是从Unity 4.x时代过来的&#xff0c;可能都用过NGUI这个插件&#xff08;后来也是土匪成了正规军&#xff09;&#xff0c;NGUI一大特点是可以靠transform位移的Z值进行遮挡排序&#xff0c;然而这个事情在UGUI成了难题&#xff08;Sorting Layer、Inspector顺序等因素…

黑马c++ STL部分 笔记(3) deque容器

双端数组&#xff0c;可以对头端进行插入删除操作 deque与vector区别&#xff1a; vector对于头部的插入删除效率低&#xff0c;数据量越大&#xff0c;效率越低&#xff08;每次头插&#xff0c;后面的元素就往后移&#xff09; deque相对而言&#xff0c;对头部的插入删除速…

代码随想录训练营第31天 | 理论基础、LeetCode 455.分发饼干、

目录 理论基础 视频讲解&#xff1a;手把手带你学会操作链表 | 贪心算法理论基础&#xff01;_哔哩哔哩_bilibili LeetCode 455.分发饼干 文章讲解&#xff1a;代码随想录(programmercarl.com) 视频讲解&#xff1a;贪心算法&#xff0c;你想先喂哪个小孩&#xff1f;| Le…

Linux Shell脚本练习(一)

一、 Linux下执行Shell脚本的方式&#xff1a; 1、用shell程序执行脚本&#xff1a; a、根据你的shell脚本的类型&#xff0c;选择shell程序&#xff0c;常用的有sh&#xff0c;bash&#xff0c;tcsh等 b、程序的第一行#!/bin/bash里面指明了shell类型的&#xff0c;比如#!/…

Docker部署ROS程序

【先上干货】 1、docker安装 curl -fsSL https://test.docker.com -o test-docker.shsudo sh test-docker.sh# ubuntu系统可以直接通过apt安装 sudo apt-get install -y docker.io 2、给docker一个root权限 sudo usermod -aG docker $USER3、启动docker服务 # service 命令…

Windows文件管理器居然提示要登录,还要开通会员才能使用?

前几天有个朋友找到小白&#xff0c;说他装了个假的Windows系统。 啥&#xff1f;Windows还有假的吗&#xff1f;那这个高仿的水准可就高了。 她说她电脑里的文件管理器突然提示她要登录&#xff0c;还要开通会员才能使用全部功能。 这可把她急坏了&#xff0c;问我说要不要支…

JMETER与它的组件们

os进程取样器 这个取样器可以让jmeter直接调用python写的测试数据 这样就可以调用python写的测试数据给到jmeter进行调用 注意&#xff1a;1建议python返回转json格式dumps一下&#xff1b;2py文件中需要把结果打印出来&#xff0c;可以不用函数直接编写 传到jmeter之后可以用…

智慧应急:构建全方位、立体化的安全保障网络

一、引言 在信息化、智能化快速发展的今天&#xff0c;传统的应急管理模式已难以满足现代社会对安全保障的需求。智慧应急作为一种全新的安全管理模式&#xff0c;旨在通过集成物联网、大数据、云计算、人工智能等先进技术&#xff0c;实现对应急事件的快速响应、精准决策和高…