MySQL45讲笔记——索引(索引模型)

索引(上)

索引常见模型:
哈希表: 以k-v形式存储在数组中,通过哈希函数计算key值得出数组位置,如果发生哈希冲突则在该数组位置追加链表。区间查询很慢,适用于等值查询。
有序数组: 有序存储,等值查询是使用二分法时间复杂度是O(log(N)),是查询效率最好的数据结构,更新数据需要移位成本太高,适用于静态存储,保存不会修改的数据。
搜索树: N叉树相比二叉树,树高较低,访问IO较少,较为适合。

InnoDB的索引模型

InnoDB中,表根据主键顺序按照索引形式存放,称为索引组织表,数据存储在B+树中。

主键索引又称聚簇索引,整行数据存放在叶子结点内。

非主键索引又称二级索引,叶子结点存放的是主键的值。

普通索引查询方式,搜索普通索引树,再根据主键去主键索引树搜索一次,这个过程称为回表

由于普通索引叶子节点存放主键,主键越小,普通索引占用空间越小。

页分裂:向数据内插入一条新数据,使后置数据移位,而数据原本所在的数据页已经满了,就需要新建数据页挪动部分数据过去,这个过程就是页分裂。

自增ID做主键的插入方式,符合追加插入的规则,不涉及挪动数据,不会触发叶子节点的分裂。推荐

业务数据做主键的插入方式,很难保证顺序插入,写入数据成本较高。

适合业务数据做主键的场景:

  1. 只有一个索引,不需要考虑其他索引叶子节点的大小问题。
  2. 索引必须唯一索引。

问题


select * from geek where c=N order by a limit 1;
select * from geek where c=N order by b limit 1;

alter table T drop primary key;
alter table T add primary key(id);

用上面语句进行重建索引是否合理?
        重建普通索引合理,重建主键索引不合理。对主键的删除或者创建都会将整个表重建,可以用alter table T engine = InnoDB代替。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值