索引的分类

1.聚簇索引和非聚簇索引?

        聚簇索引是指数据行按照顺序存储和使用,在innodb中,主键索引被称为聚簇索引,其他索引是非聚簇索引,因为主键索引中叶子节点是完整的数据行,叶子节点之间通过双向链表连接,而非主键索引的叶子节点是主键的值,如果使用非主键索引(辅助/普通索引)的话,需要回表二次到主键索引中进行二分查找。在innodb中,如果插入数据行的顺序和主键索引的顺序不同,在当前innodb页储存满时,会发生页分裂,新插入的数据行需要按照顺序排列,导致插入的效率变低。

聚簇索引的优势:IO次数少,查询效率高;

聚簇索引的劣势:无序插入数据时会页分裂;

2. B+树的结构?

        对于innodb,非聚簇索引,非叶子节点存储索引值,叶子节点存储主键值;聚簇索引,非叶子节点存储主键索引值,叶子节点存储数据行。对于myisam引擎,都是非聚簇索引,非叶子节点存储索引值,叶子节点存储数据的地址。

2. B+树的层数?

        以innodb主键索引举例,索引采用B+树的数据结构,查找数据从根节点开始,一旦建立聚簇索引,根节点的地址就会记录下来;B+树的非叶子节点储存下一层的指针和主键索引的值,叶子节点存储数据行内容。

        在磁盘上,储存的最小单位为扇区,大小为512字节;在操作系统中,最小单位为块,大小为4k;在innodb中,最小单位为页,大小为16K。如果数据行的平均大小为1K,一页能存储16条数据行记录(16个叶子节点)。innodb中指针大小为8字节,主键的值如果是bigint也是8字节,一页能储存 16k / (8bytes + 8bytes)约等于 1000,高度为1的B+树能存储 16条数据,高度为2的B+树能存储1000 * 16 条数据,高度为3的B+树能存储1000 * 1000 * 16 = 1600,0000数据,B+树的高度一般是2-4,可以满足千万级数据的查询,一次页的查询代表一次IO,需要2-4次IO即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值