数据库学习之索引

索引的作用
索引,可以类比为查字典过程中,根据拼音或者偏旁找字的这个过程。所以,在数据库中索引的出现,目的也是为了提高数据查询的效率。
索引常见的模型
1 哈希表 == (key-value)数组+链表,适用场景:等值查询。哈希表模型的特点是,插入很方便,但是查询代价很高
2 有序数组,使用场景:等值查询和范围查询场景。有序数组模型的特点是查询方便,增删操作代价很高
3 B+树
首先,我们都知道程序在运行的过程中操作的存储于空间基本上都是内存,内存与外存进行数据交换时,需要写相应的代码或者具体操作才能都进行访问。
而,在数据库中,数据库的索引基本上都保存在外存中。所以当B+树种单个节点的个数越多时,一颗树对应xu的节点总数就会越少,这样查询一次所需要访问的节点成本就少了。
节点成本:把数据从外存中读取到内存时,每次读取使用的单位都是页,每当要读取数据时,都需要将所在的整个页的数据都读进来,不允许出现只读0.5的页内容。在操作系统中,一个页的大小是由操作系统本身决定的。因此,在算一个节点的读取成本时,就是衡量需要读取多少个页。
因此,我们可以知道当使用的节点大小正好等于操作系统页的大小时,就是B+树实现效率最高的时候。
在InnoDB中,一个索引对应一颗B+树。
非聚簇索引(非主键索引) 和 聚簇索引(主键索引)
主键索引:在InnoDB中,主键索引的叶子结点存的正行数据
非主键索引:在InnoDB中,非主键索引的叶子结点存储的主键的值。
回表:根据非主键索引,找到了主键的值,再从主键索引中,找到对应的数据的过程
索引的维护
插入新值时,对应数据所在的数据页已满时,根据B+树算法需要申请一个新的数据页,然后把一部分数据挪到新的数据页中
删除旧值时,可能会对相邻的两个数据页做合并。
覆盖索引
当待查询的值已经在索引树上时,称为覆盖索引。覆盖索引,可以显著的提升查询的新能
联合索引
以多个字段来作为索引的条件。
最左前缀原则
联合索引满足最左前缀原则。因此在建立联索引时,在安排索引内字段顺序时,需要慎重考虑。遵循的原则是,铜鼓怎样的排列可以少维护一个索引。
索引下推
索引下推优化,可以再索引遍历过程中,对索引中包含的字段先做判断,直接过滤不满足条件的记录,从而减少回表的次数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值