MySQL(八):索引,java程序设计案例教程课后答案吕林涛

    • OLTP与OLAP
  • 不同应用中B+树索引的使用

  • 联合索引

  • 覆盖索引

  • INDEX HINT

  • Multi-Range Read

  • Index Condition Pushdown

  • T树索引

    • T树概述
  • T树的查找、插入和删除操作

  • T树的旋转

  • 哈希索引(索引不再是B+树,而是一个散列表)

    • 散列表
  • InnoDB存储引擎中的散列算法

  • 自适应哈希索引

缓冲池、顺序读取和顺序读取

根据存储介质的不同,可以将数据库分为基于磁盘的数据库系统、基于内存的数据库系统,以及混合型数据库系统。基于磁盘的数据库系统是最为常见的一种关系型数据库,比如MySQL、SQL Server。随着内存的使用不断增加,基于内存的数据库系统也变得十分流行了,而混合型数据库系统就是将上述两种数据库的有点进行了结合。

毫无疑问,基于内存的数据库系统是最快的,因为数据库不需要对磁盘进行操作,磁盘的速度要远远慢于内存的速度,因此基于磁盘的数据库系统一斑都有缓冲池,即一块内存区域,其作用是从磁盘上读取的指定大小数据——称为页或块,放入缓冲池中,当再次读取的时候,数据库会首先判断该页是否在缓冲池中,如果在的话,会直接从缓冲池中读取缓冲池中的页,如果不在则读取磁盘上的页(读取了就会放入缓冲池中)。而对于写的操作,数据库将页读入缓冲池中,然后在缓冲池中对页进行修改,修改完成的页一般被异步地写入磁盘中(异步即开启另一个线程去写,不影响当前的使用,同步是要完成当前的动作,才能开启下一个动作)。

对于缓冲池的维护一般采用LRU算法,由此可见,缓冲池的大小决定了数据库的性能,若数据库中的数据可以完全存放于缓冲池中,则可以认为这时的数据库是最优的,除了同步/异步的写磁盘的操作外,所有其他操作都可以在内存中完成。

对于MySQL数据库系统,由于其有着各种不同的存储引擎,因此其缓冲池是基于存储引擎的,也就是说每个存储引擎都有自己的缓冲池。对于MyISAM存储引擎来说,变量key_buffer_size决定了缓冲池的大小,对于InnoDB存储引擎来说,变量innodb_buffer_pool_size决定了缓冲池的大小。

现在我们来了解一下读取页(磁盘储存数据的单位)的方式

总共有2种方式,第一种是顺序读取,顺序读取是指按顺序地读取磁盘上的页,第二种是随机读取,随机读取并不是指随机去读取,而是指访问的页并不是连续的,即需要磁盘的磁头不断移动(传统的机械硬盘是由磁头、磁道、扇区、柱面组成的,读取时需要通过磁头的移动来定位数据,这个时间称为寻道时间)。这里需要注意的是,这里的顺序是指逻辑上的顺序(即获取页中的数据,数据的先后),在物理上不可能保证所有的数据都是顺序的(即页在磁盘中的分布都是按顺序来的),而为了保证顺序,数据库存储引擎一般都是根据来管理,例如在InnoDB存储引擎中的一个区是64( 2 6 2^6 26)个页,因此在顺序读取数据库时,可以保证这64个页是连续的,而区与区之间的页,可能连续也可能不连续(比如某个表数据需要4页的存储空间,然后这个区只剩下3页,那么是明显不够的,需要另一个区再提供一页,那么这两个区的数据就连续了)

B+树索引

B+树的索引的本质就是B+树在数据库中的实现,而B+树索引在数据库中的一个特点就是高扇出性(就是结点可以放多个数据,每个数据又看作一个小结点,每个小结点的下一层又可以放左右两个结点,比如一个4-结点,那么这4-结点的子结点就有8个),例如在InnoDB存储引擎中,每个页的大小为16KB(页在B+树的体现,就是B+树的叶子结点,因为页是存储数据的,B+树只有叶结点有数据,注意这里的叶结点也是什么M-结点的,所以一个页是有多行数据的,也就是多个data,16KB也就大概16个结点),因此树的高度一般都在2~4层。

这意味着使用索引进行一次查找,顶多需要2到4次的IO操作(访问磁盘,或者访问缓存区)。

B+树索引可以分为聚集索引和辅助索引(即非聚集索引),但是这两者本身本质都与B+树结构一样,区别仅仅在于所存放的数据不同。

InnnoDB的B+树索引

InnoDB的存储引擎索引组织表,也就是说数据文件本身(页和块)就是按照B+树方式存放数据的。其中,B+树的键值为主键,若在建立时没有显示地指定主键,则InnoDB存储引擎会自动创建一个6字节

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值