MySql索引

什么是索引
索引是帮助MySQL高效获取数据的排好序的数据结构

数据库建立索引的常用规则如下:
1.表的主键和外键建立索引
2.在order by 或者 group by 后边建立索引
3.数据量超过300的应该建立索引
4.经常与其他表进行连接的表的字段,应该在该字段上建立索引
5.经常出现在where字句中的字段应该建立索引
6.复合索引在建立是应该仔细分析,经量用单字段索引代替

不应该建立索引的字段规则
1.不应该在字段比较长的字段上建立索引,因为会消耗大量的空间
2.对于经常频繁进行修改和插入的表应该少建立索引,因为在修改 和插入之后,数据库会去维护索引,会消耗资源
3.尽量少在无用字段上建立索引

索引存储在文件里
索引结构
二叉树:从左到右依次递增,左边的数小于它的父节点,右边的数大于它的父节点

红黑树
Hash :底层通过hash算法得到一个地址值映射到要查找的数据,不适合范围查找

B-Tree
度(Degree)-节点的数据存储个数
叶节点具有相同的深度
叶节点的指针为空
节点中的数据key从左到右递增排列
在这里插入图片描述
B+TREE(B-Tree变种)
非叶子节点不存储data,只存储key,可以增大度
叶子节点不存储指针
顺序访问指针,提高区间访问的性能

面试题:B+Tree为什么把data都移到叶子节点?
MySql的节点大小是有限制的,把data移到叶子结点意味着大的节点(大节点分配的内存默认是16K)可以横向存储更多的索引元素,索引的分叉将会更多,树的高度更加小了。
大节点分配的内存:
show GLOBAL STATUS like ‘innodb_page_size’;
叶子结点可以存储多少索引的数值:
:16K /14B =1170个,共有三层,1170 * 1170 * 16 大约 2千1百万左右
8B+6B =14B 叶子节点16K在这里插入图片描述在这里插入图片描述

MyISAM和InnoDB都是用来形容表的
MyISAM引擎的表在D:\JavaWeb\MySql5.5\data\mysql目录下有三个文件(以user表为例):user_frm、user_MYD、user_MYI
user_frm:存储表的定义
user_MYD:表对应的所有数据行
user_MYI:索引字段存储的位置
MyISAM索引的实现(非聚集):
以select * from user where col1=49为例
B+Tree存在MYI文件里面,拿到col1字段先从根节点去定位查找,找到叶子结点对应的data里面的数据(文件磁盘的指针),然后去MYD文件里面查找
在这里插入图片描述Col1作为主键索引
data里面存储存储的是索引所在行的行数据的磁盘文件指针(16进制的值)

InnoDB索引实现(聚集)
MyISAM引擎的表在D:\JavaWeb\MySql5.5\data\mysql目录下有两个文件
(以student表为例):student_frm、student_ibd
在这里插入图片描述
叶子结点的指针解决了范围内的高校查找
聚集索引:主键索引和数据存储在一个文件里面
面试题:为什么InnoDB表必须要有主键,并且推荐使用整形的自增长主键?
如果设置了主键,那么InnoDB会选择主键作为聚集索引。如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引、如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID作为隐含的聚集索引(ROWID随着行记录的写入而主键递增)。
整形存储在磁盘空间比字符串占用的空间更小;整形比较大小比字符串效率更高;主键自增可以尽可能的避免我插入的这个节点插入到叶子节点之后,原有的叶子节点已经满了之后做分裂以及自动平衡。

面试题:为什么非主键索引结结构叶子节点存储的是主键值?(一致性和节省存储空间)
减少了出现行移动或者数据页分裂时二级索引的维护工作(当数据需要更新的时候,二级索引不需要修改,只需要修改聚簇索引,一个表只能有一个聚簇索引,其他的都是二级索引,这样只需要修改聚簇索引就可以了,不需要重新构建二级索引)

聚簇索引也称为主键索引,其索引树的叶子节点中存的是整行数据,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。因为索引(目录)只能按照一种方法进行排序。

非聚簇索引(普通索引)的叶子节点内容是主键的值。在 InnoDB 里,非主键索引也被称为二级索引(secondary index)。

常见的索引优化(未完待续)

密码怎样保存才安全?
使用MD5加密

数据治理是确保数据准确性、可靠性、安全性、可用性和完整性的体系和框架。它定义了组织内部如何使用、存储、保护和共享数据的规则和流程。数据治理的重要性随着数字化转型的加速而日益凸显,它能够提高决策效率、增强业务竞争力、降低风险,并促进业务创新。有效的数据治理体系可以确保数据在采集、存储、处理、共享和保护等环节的合规性和有效性。 数据质量管理是数据治理中的关键环节,它涉及数据质量评估、数据清洗、标准化和监控。高质量的数据能够提升业务决策的准确性,优化业务流程,并挖掘潜在的商业价值。随着大数据和人工智能技术的发展,数据质量管理在确保数据准确性和可靠性方面的作用愈发重要。企业需要建立完善的数据质量管理和校验机制,并通过数据清洗和标准化提高数据质量。 数据安全与隐私保护是数据治理中的另一个重要领域。随着数据量的快速增长和互联网技术的迅速发展,数据安全与隐私保护面临前所未有的挑战。企业需要加强数据安全与隐私保护的法律法规和技术手段,采用数据加密、脱敏和备份恢复等技术手段,以及加强培训和教育,提高安全意识和技能水平。 数据流程管理与监控是确保数据质量、提高数据利用率、保护数据安全的重要环节。有效的数据流程管理可以确保数据流程的合规性和高效性,而实时监控则有助于及时发现并解决潜在问题。企业需要设计合理的数据流程架构,制定详细的数据管理流程规范,并运用数据审计和可视化技术手段进行监控。 数据资产管理是将数据视为组织的重要资产,通过有效的管理和利用,为组织带来经济价值。数据资产管理涵盖数据的整个生命周期,包括数据的创建、存储、处理、共享、使用和保护。它面临的挑战包括数据量的快速增长、数据类型的多样化和数据更新的迅速性。组织需要建立完善的数据管理体系,提高数据处理和分析能力,以应对这些挑战。同时,数据资产的分类与评估、共享与使用规范也是数据资产管理的重要组成部分,需要制定合理的标准和规范,确保数据共享的安全性和隐私保护,以及建立合理的利益分配和权益保障机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值