【Linux】文件与目录的默认权限与隐藏权限(1)

简介: 【Linux】文件与目录的默认权限与隐藏权限

这一篇写的东西会很多,很多,因为我要把关于索引的所有东西都写在一起,由于本人对索引的概念很是模糊,只能现在先写出来,后期在慢慢理解。

在MySQL5.7之后存储引擎默认成了innodb,所以就主要讲解innodb的索引结构。


innodb存储引擎对于数据表结构


Innodb存储引擎用于管理数据的最小磁盘单位。常见的页类型有数据页,Undo页,系统页,事物数据页。下面主要分析的数据页。默认的页面大小为16kb,每个页中至少存储2条或以上的行记录

屏幕快照 2022-05-17 下午10.55.59.png



表空间


表空间分为了两种,这里简单的概括一下:

独立表空间:每一个表都将会生成以独立的文件方式来进行存储,每一个表都有一个.frm表描述文件,还有一个.ibd文件。 其中这个文件包括了单独一个表的数据内容以及索引内容,默认情况下它的存储位置也是在表的位置之中。

共享表空间: Innodb的所有数据保存在一个单独的表空间里面,而这个表空间可以由很多个文件组成,一个表可以跨多个文件存在,所以其大小限制不再是文件大小的限制,而是其自身的限制。从Innodb的官方文档中可以看到,其表空间的最大限制为64TB,也就是说,Innodb的单表限制基本上也在64TB左右了,当然这个大小是包括这个表的所有索引等其他相关数据。


InnoDB把数据保存在表空间内,表空间可以看作是InnoDB存储引擎逻辑结构的最高层。本质上是一个由一个或多个磁盘文件组成的虚拟文件系统。InnoDB用表空间并不只是存储表和索引,还保存了回滚段、双写缓冲区等。


分片段(Segment)


段是表空间文件中的主要组织结构,它是一个逻辑概念,用来管理物理文件,是构成索引、表、回滚段的基本元素。


创建一个索引(B+树)时会同时创建两个段,分别是内节点段和叶子段,内节点段用来管理(存储)B+树非叶子(页面)的数据,叶子段用来管理(存储)B+树叶子节点的数据;也就是说,在索引数据量一直增长的过程中,所有新的存储空间的申请,都是从“段”这个概念中申请的。



页是InnoDB磁盘管理的最小单位 对于innodb来说就是 16KB 不过如果是oracle 或者SQLserver就是4kb的大小。

这里单单指的是数据页,数据页里边存储的是每一行数据,有用过数据库客户端的可以理解为就是一条一条数据


Innodb的数据结构跟索引有什么关系


为什么要写这里,这里需要你知道索引在表页中起的作用

之前写过:https://blog.csdn.net/fangkang7/article/details/98973186


认识索引


在MySQL中,主要有四种类型:分别为BTree索引,哈希索引,Fulltext索引,R-Tree索引


先介绍俩个概念,非叶节点,叶子节点

屏幕快照 2022-05-17 下午10.56.20.png


b+tree跟b-tree的区别


B+Tree相对于B-Tree有几点不同:

非叶子节点只存储键值信息。

所有叶子节点之间都有一个链指针。

数据记录都存放在叶子节点中。


每个节点都存储key和data,所有节点组成这棵树,并且叶子节点指针为null。

屏幕快照 2022-05-17 下午10.56.48.png


B+树

索引的底层原理就是B+Tree

只有叶子节点存储data,叶子节点包含了这棵树的所有键值,叶子节点不存储指针。

屏幕快照 2022-05-17 下午10.56.58.png


主索引与辅助索引


主键索引(主索引):在叶子节点存放的是数据

二级索引(辅助索引):在叶子节点处存放的是这个表的主键


普通的索引找在叶子节点主键,主键索引在叶子节点找数据


在 InnoDB 存储引擎中,每一个索引都对应一棵 B+ Tree,InnoDB 的索引主要分为主索引和辅助索引:


主索引:包含记录的文件按照某个 key 制定的顺序排序,这个 key 就是主索引,也就是主键,也被称为聚簇索引。因为无法同时把数据行存放在两个不同的地方,所以一个表只能有一个聚集索引。在 InnoDB 中,主索引的叶子节点存的是整行数据,这也意味着 InnoDB 中的表一定要有一个主索引;

辅助索引:某个 key 指定的顺序与文件记录的物理顺序不同,这个 key 就是辅助索引。InnoDB 中的辅助索引在叶子节点中并不存储实际的数据,只会包含主索引的值。这就意味着如果使用辅助索引进行数据的查找,只能查到主索引,然后根据这个主索引再次扫描以下主索引的树,进行一次回表操作;


索引在优化器中的执行流程


文章地址:https://blog.csdn.net/fangkang7/article/details/99443549


**索引B+Tree


B+tree是在二叉树的基础上演变来的。b+tree的定义实际上是比较的复杂的,b+tree视为磁盘或其他直接存取辅助设备设计的一种平衡查找树。在B+tree中,所有记录节点都是按键值的大小顺序存放在同一层的叶子节点上,由各叶子节点指针进行连接。

b+tree会根据指定的索引列的值排序:5,10,15,20,25,30,50,55,60,65,75,80,85,90

屏幕快照 2022-05-17 下午10.57.11.png


平衡二叉树的原理


平衡二叉树的查找性能是比较高的,但不是最高的只是接近最高性能。平衡二叉树的维护实际上代价是非常大的。通常来说,需要1次或者更多次的左旋和右旋来得到插入或更新后树的平衡性。

实例一:

当插入9这个值后,会围绕8进行一次左旋,以保证平衡

屏幕快照 2022-05-17 下午10.57.33.png


**hash索引


命令alter table user add index hash_gender using hash(gender);

会发现name的索引类型还是为btree;这是innodb的特点,当前的name可以成为自适应哈希索引;是因为完全由InnoDB自己决定,不需要DBA人为干预。它是通过缓冲池中的B+树构造而来,且不需要对整个表建立哈希索引,因此它的数据非常快


屏幕快照 2022-05-17 下午10.58.02.png

如下:图 MySQL根据字段值创建对应的索引然后会以零散的方式存放


哈希索引值包含哈希值和行指针,而不存储字段值,所以不能使用索引的值避免数据库对于行的 读取(using index)。不过访问内存中的行的速度很快,索引大部分情况下这点并不影响;

哈希索引数据并不是按照索引值顺序存储的,所以也就无法用于排序。

哈希索引不能利用部分索引来查询(联合索引的情况) =》 因为哈希索引是通过内容计算到的哈希值。

哈希如果遇到大量的hash值相等的时候,一些索引维护操作的代价会很高

屏幕快照 2022-05-17 下午10.59.01.png



相关文章
|
4天前
|
存储 Linux
Linux 目录名称
Linux系统目录结构简介:根目录(/)下包含各类功能目录,如/bin存放用户命令,/etc存储配置文件,/home为用户主目录,/var记录日志等可变数据,/usr存放用户工具,/tmp用于临时文件。各目录分工明确,保障系统有序运行。(238字)
64 5
|
5月前
|
Linux 开发工具
7种比较Linux中文本文件的最佳工具
7种比较Linux中文本文件的最佳工具
7种比较Linux中文本文件的最佳工具
|
3月前
|
存储 数据管理 Linux
区分Linux中.tar文件与.tar.gz文件的不同。
总之,".tar"文件提供了一种方便的文件整理方式,其归档但不压缩的特点适用于快速打包和解压,而".tar.gz"文件通过额外的压缩步骤,尽管处理时间更长,但可以减小文件尺寸,更适合于需要节约存储空间或进行文件传输的场景。用户在选择时应根据具体需求,考虑两种格式各自的优劣。
483 13
|
4月前
|
安全 Linux
Linux赋予文件000权限的恢复技巧
以上这些步骤就像是打开一扇锁住的门,步骤看似简单,但是背后却有着严格的逻辑和规则。切记,在任何时候,变更文件权限都要考虑安全性,不要无谓地放宽权限,那样可能
148 16
|
4月前
|
存储 Linux 数据处理
深入剖析Linux中一切即文件的哲学和重定向的机制
在计算机的奇妙世界中,Linux的这套哲学和机制减少了不同类型资源的处理方式,简化了抽象的概念,并蕴藏着强大的灵活性。就像变戏法一样,轻轻松松地在文件、程序与设备之间转换数据流,标准输入、输出、错误流就在指尖舞动,程序的交互和数据处理因此变得既高效又富有乐趣。
70 4
|
5月前
|
Linux
【Linux】 Linux文件I/O常见操作技巧
以上就是Linux文件I/O操作的一些技巧,接纳它们,让它们成为你在Linux世界中的得力伙伴,工作会变得轻松许多。不过记住,技巧的运用也需要根据实际情况灵活掌握,毕竟,最适合的才是最好的。
140 28
|
5月前
|
Ubuntu Linux
"unzip"命令解析:Linux下如何处理压缩文件。
总的来说,`unzip`命令是Linux系统下一款实用而方便的ZIP格式文件处理工具。本文通过简明扼要的方式,详细介绍了在各类Linux发行版上安装 `unzip`的方法,以及如何使用 `unzip`命令进行解压、查看和测试ZIP文件。希望本文章能为用户带来实际帮助,提高日常操作的效率。
658 12
|
5月前
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
279 3
|
6月前
|
Linux 定位技术
Linux系统中的cd命令:目录切换技巧
踏过千山,越过万水,人生就是一场不断前行的旅程,总充满了未知与挑战。然而,“cd”命令如同你的旅伴,会带你穿梭在如棋盘一般的文件系统中,探索每一处未知。希望你能从“cd”命令中找到乐趣,像是掌控了一种络新妙的魔法,去向未知进发,开始你的探索之旅。
248 24
|
6月前
|
Linux Shell
Linux系统下快速批量创建和删除文件的方法
总的来说,使用shell脚本来批量处理文件是一种非常强大的工具,只要你愿意花时间学习和实践,你会发现它能大大提高你的工作效率。
360 19