MySQL

索引

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

如果为表的某一个字段建立索引,那么这个字段就作为索引的key值,value值就是对应于该字段的位置指针。

如果存储索引的数据结构是二叉搜索树的话,那么对一个递增的字段建立索引,在查找索引值为最大的那个数的时候,还是会扫描全表。

如果存储的数据结构是红黑树的话,红黑树的数据结构是一边的节点个数超过三个,就会进行旋转。比如某个节点的右节点的个数超过3个,那么进行RR旋转。这对于简单的二叉搜索树来说,存储的深度可能会有所的减少,但是也可能出现2的n次方等于总共节点的个数。其中n表示的是二叉树的深度,意思就是可能每层都只有两个节点。

B树相当于n叉平衡树,每个节点可以存n个节点。每一个节点中的值是排好序,在进行查找的时候,会将该节点的值存储在内存中,然后进行查找。那么相对于红黑树每次磁盘I/O只能存一个值来说,B树会明显减少磁盘I/O的次数,从而提高查找效率。

B+树相对于B树来说,非叶子节点都只是存的key值,叶子节点才是存的key,value。并且每个叶子节点都有指向它右边叶子节点的指针。这样做的优点是,非相对于B树将key和value的值都存到节点中,B+树每个非叶子节点的存储的索引值要比B树多很多。这样就能在高度有限的情况下,存储更多的节点。B+数在高度为3的情况下,就能存储千万级的数据。因为每一个高度代表要进行一次磁盘操作,所以也就是说B+树相对与B树来说在存储更多数据的情况下,减少了I/O操作的次数。

Hash索引,是用hash算法,来查找索引的值,如果我们查找某个key值,利用hash算法好像比B+树查找速度快,那么为什么不使用hash呢,因为hash虽然等值查找速度快,但是如果我们查找条件是一个范围的时候,hash算法就没办法解决了,那么也是要扫描全表。

存储引擎

MyISAM存储引擎,每一张表都存储有三个文件,一个是表的结构定义的数据文件,以frm结尾,另一个是存储表数据的文件,以MYD结尾,还有一个是记录了表的索引字段存储的未知,以MYI结尾。

InnoDB存储引擎,如果定义每一张表单独存储一个文件的话,那么每一张表对应两个文件,一个是表的结构定义文件,也是以frm结尾,另一个是存放表数据和索引的文件,以ibd结尾。

MyISAM存储引擎的的索引的叶子节点存储的是该key对应的value值的地址,然后拿到这个地址到数据文件中查找具体的数据,这就是非聚集索引。InnoDB存储引擎,叶子节点value值存储的是每一条记录,可以直接根据这个记录返回我们所需要的结果,这就是聚集索引。所以我们可以很容易的知道InnoDB存储引擎的性能比MyISAM存储引擎要高一些。

一般都推荐在为整数自增的字段上建立索引,为什么?

因为,如果不是整数,比如是在字段的数据类型为字符串上建立索引,那么在比较的时候需要一个一个字符进行比较,相对于整数来说,比较的速度要慢很多。

那又为什么要在自增的字段上建立索引呢?因为不是自增的,那么在添加一条记录,我们肯定要在索引的数据结构中进行插入,如果插入的这条记录的索引字段应该插入的节点的个数正好已经为n个,那么插入这个节点肯定会造成这个节点分裂,然后再进行以此调整的操作。如果是自增的,那么插入一条新纪录,肯定是在后面新开辟一个空间,所以相对于不是自增的,就减少了很多调整B+树的过程。

为什么B+树叶子节点都有指向它右边叶子节点的指针?

因为在进行返回查找的时候,比如我们查找某个索引值大于>20的所有元素,那么我们就可以只需要找到20对应的未知,然后依次就可以取出后面的所有的元素。

Http状态码:

1x:(被接受,需要继续处理。)这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应信息,并以空行结束

2x:(请求成功)这一类型的状态码,代表请求已成功被服务器接收,理解,并接受。

3x:(请求重定向)这类状态码代表客户端采取进一步操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的location域中指明。

4x:(请求错误)比如是编码格式不对,语法不对等。

5x:(服务器错误)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 索引 数据库中的查询操作非常普遍,索引就是提升查找速度的一种手段 索引的类型 从数据结构角度分 1.B+索引:传统...
    一凡呀阅读 3,040评论 0 8
  • 今天看到一位朋友写的mysql笔记总结,觉得写的很详细很用心,这里转载一下,供大家参考下,也希望大家能关注他原文地...
    信仰与初衷阅读 4,763评论 0 30
  • 零.索引简介 1. 索引是什么 ①MySQL官方对索引的定义是:索引(Index)是帮助MySQL高效获取数据的数...
    一条路上的咸鱼阅读 949评论 0 6
  • 原文链接:MySQL索引背后的数据结构及算法原理 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题...
    加油小杜阅读 885评论 0 8
  • 昨天因为身体原因,没有坚持日更,今天继续。 别人今天评论我说我很成熟,思想成熟,但其实,平时不了解我的人,都会说我...
    小白黑皮皮阅读 219评论 0 3