当前位置:网站首页>The second step through MySQL in four steps: MySQL index learning
The second step through MySQL in four steps: MySQL index learning
2022-08-04 17:04:00 【Venti Latte Plus Concentrate】
携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情
一、First look at the index
1、定义
数据库索引,是数据库管理系统(DBMS)中-a sorted data structure,以协助快速查询、更新数据库表中数据.
2、本质
一种有序的数据结构
3、InnoDB中索引类型
索引类型 | 索引特点 |
---|---|
普通(Normal) | 最普通的索引,没有任何的限制,也叫非唯一索引. |
唯一(Unique) | 唯一索引要求键值不能重复.主键索引是特殊的唯一索引(primay key) |
全文(Fulltext) | For larger text-type fields(char、verchar、text)进行likeThe query efficiency is slow and a full-text index can be created. |
二、MySQL(InnoDB)中的索引结构
1、B+ Tree
Combine the definition and nature of indexes,通俗来说,An index is a data structure that improves query efficiency,而InnoDBThe data structure used isB+ Tree
2、B+ Tree的特性
1、The number of keywords and the number of paths are equal
2、Only store information in leaf nodes,References between keys and leaves are stored on the parent node,Adding further reduces the depth of the tree
3、B+TreeEach leaf node of is added a pointer to the adjacent leaf node,它的最后一个数据会指向下一个叶子节点的第一个数据,形成了一个有序链表的结构.(Improved the speed of traversing requirements)
3、特性带来的优势
1、它是B Tree的升级版,B Tree解决了AVL树(平衡二叉树)A single node has less stored value(The depth of the tree is too deep for large data volumes)的问题(当我们用树的结构来存储索引的时候,Accessing a node happens once with the diskIO操作,InnoDB操作磁盘的最小单位是一页(16k),Then a tree node must be designed as 16K的大小,Otherwise, there will be situations where the reading is incomplete or not enough.而AVLA node of the tree stores only one key value、地址、子节点引用,远达不到16K,造成浪费.)
2、扫库、扫表能力更强(如果我们要对表进行全表扫描,只需要遍历叶子节点就可以了,不需要遍历整棵B+Tree拿到所有的数据)
3、排序能力更强(因为叶子节点上有下一个数据区的指针,数据形成了链表)
4、效率更加稳定(B+ Tree永远是在叶子节点拿到数据,所以IO次数是稳定的)
4、InnoDB中的B+ Tree
首先了解一个概念:
聚集索引(聚簇索引):Refers to the index and data clustered together,What is stored on the leaf nodes of the index is not the address value of the usual data in the library,It is directly this data
MyISAM和InnoDB的一个区别就是MyISAMIndex files in the engine(.MYI)和数据文件(.MYD)是分开的,There is no difference in how data is stored and retrieved in a non-primary key index and a primary key index,一样是在索引文件里面找到磁盘地址,然后到数据文件里面获取数据.
而InnoDB使用聚集索引(聚簇索引)的概念,Data is stored directly on the leaves,所以实现索引即数据,数据即索引. 除了聚集索引,Others are called secondary indexes(secondary index)The leaf nodes of the secondary index store the keys of the clustered index,
聚集索引的选取规则:
1、如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引.
2、如果没有显式定义主键,则InnoDB会选择第一个不包含有 NULL值的唯一索引作为主键索引.
3、如果也没有这样的唯一索引, 则InnoDB会选择内置6字节长的ROWID作为隐藏的聚集索引,它会随着行记录的写入而主键递增.
5、索引的使用原则
1、列的离散度
列的重复值越多,离散度越低;重复值越少,离散度就越高.
When we select the index column, we should choose the column with high discreteness as much as possible to build the index.
2、The leftmost match of the column
When creating a joint index, be sure to put the most commonly used columns on the leftmost,This eliminates the need to repeatedly index individual columns.
举个“栗子”:一张user表,列:姓名、性别、身份证号
First, the gender dispersion is too low,不适合建立索引,It is assumed that the ID number is often used as a separate condition for querying in business,When we build a joint index of ID number and name, we need to put the ID number on the left side of the joint index,In this way, you can also use the index when you use the ID number as the query condition alone,No name creation is required、The joint index of ID number and the separate index of ID number have two indexes.
3、覆盖索引
在二级索引里面,不管是单列索引还是联合索引,如果select的数据列只用从索引中就能够取得,不必从数据区中读取,这时候使用的索引就叫做覆盖索引,这样就避免了回表(非主键索引,我们先通过索引找到主键索引的键值,再通过主键值查出索引里面没有的数据,It's better than a bow based on the primary key|The query scans one more index tree, 这个过程就叫回表.)
边栏推荐
- Digital-intelligent supply chain management system for chemical manufacturing industry: build a smart supply system and empower enterprises to improve production efficiency
- 【论文阅读】Decision Transformer: Reinforcement Learning via Sequence Modeling
- WEB 渗透之SSTI 模板注入
- SRM供应商协同管理系统功能介绍
- 咪咕MGV2000KL南传_S905L3B_MT7668线刷固件包
- 服装店如何利用好积分?
- Boost库学习笔记(一)安装与配置
- 机器学习(十六):主成成分分析(PCA)
- Unity Apple登录接入
- el-date-picker 设置时间范围
猜你喜欢
湖北电信天邑TY1608_S905L3B_MT7668_卡刷固件包
Hubei Mobile ZTE B860AV2.1_S905L_ flash firmware package
跨链桥已成行业最大安全隐患 为什么和怎么办
【LeetCode每日一题】——540.有序数组中的单一元素
GraphQL 入门与实践
移动百事通BesTV_R3300-L_S905L_8189_线刷固件包
美容院管理系统有哪些促销方式?
Boost库学习笔记(一)安装与配置
不需要服务器,教你仅用30行代码搞定实时健康码识别
Mobile magic box CM201-1_CW_S905L2_MT7668_wire brush firmware package
随机推荐
容器化 | 在 NFS 备份恢复 RadonDB MySQL 集群数据
Boost库学习笔记(一)安装与配置
AtCoder Beginner Contest 262 部分题解
谷歌开发者社区推荐:《Jetpack Compose 从入门到实战》新书上架,带你踏上 Compose 开发之旅~
适配器模式
不需要服务器,教你仅用30行代码搞定实时健康码识别
机器学习(十四):K均值聚类(kmeans)
SAP 电商云 Spartacus UI SSR 里 engine 和 engine instance 的区别
正则过滤字符串中 script 标签
机器学习(十八):随机搜索和XGBoost
力拓信创生态,博睿数据多款产品获得东方通与达梦数据库产品兼容互认证明
码蹄集 - MT2142 - 万民堂大厨
域名哪家便宜?怎么买便宜域名?
安装win11提示开启安全模式如何解决
JVM内存和垃圾回收-08.方法区
Heilongjiang Mobile New Magic Hundred Box M411A_2+8_S905L3A_wire brush firmware package
ES中同时使用should和must导致只有must生效解决方案
如何模拟后台API调用场景,很细!
智慧场馆的无人值守怎么做?
九联_UNT400G_S905L2_(联通)_线刷固件包