面经:mysql索引

1. 数据结构

  mysql 使用的是(Balance+ Tree,也就是平衡树)B+树,在B树的基础上做了优化,B+ Tree 是基于 B Tree 和叶子节点顺序访问指针进行实现,它具有 B Tree 的平衡性,并且通过顺序访问指针来提高区间查询的性能。

2. 查询性能和原理

2.1 减少IO次数
  树的查询速度是取决于树的高度,一般的树,如红黑树每个节点挂了2个子叶,mysql为了提供性能在每个节点下挂了更多子叶,这样可以减少IO的次数.
2.2 利用磁盘预读特性
  为了减少磁盘 I/O,磁盘往往不是严格按需读取,而是每次都会预读。预读过程中,磁盘进行顺序读取,顺序读取不需要进行磁盘寻道,并且只需要很短的旋转时间,速度会非常快。        
  操作系统一般将内存和磁盘分割成固态大小的块,每一块称为一页,内存与磁盘以页为单位交换数据。数据库系统将索引的一个节点的大小设置为页的大小,使得一次 I/O 就能完全载入一个节点。并且可以利用预读特性,相邻的节点也能够被预先载入.

3.mysql索引

3.1 InnoDB
  mysql默认使用的是InnoDB.
  InnoDB 的 B+Tree 索引分为主索引和辅助索引。主索引的叶子节点 data 域记录着完整的数据记录,这种索引方式被称为聚簇索引(聚簇索引是将数据和索引放在一起,这样可以让查询的速度更快)。

在这里插入图片描述
当然还有另一种索引,哈希索引.

3.2 哈希索引
使用InnoDB的基本所有查询的时间复杂度是O(lg n),包含grup by,order by.
哈希索引的单点查询时间复杂度是O(1),如果是grup by,order by是O(n).
3.3 全文索引
MyISAM支持全文索引,而InnoDB也是在 MySQL 5.6.4 版本中也开始支持全文索引.
3.4 空间数据索引
MyISAM 存储引擎支持空间数据索引(R-Tree),可以用于地理数据存储。空间数据索引会从所有维度来索引数据,可以有效地使用任意维度来进行组合查询。必须使用 GIS 相关的函数来维护数据。
3.5 索引优化
 1.索引支持单列索引和多列多列索引,在索引的选用中一般会要选择散列度高.
 2.在多列索引中,一般要将散列度(选择度)高的索引放在前面,这样性能更好.
 3.对应要储存字符串的列(varchar,text..)加索引时要添加前缀索引.
 4.覆盖索引,即索引中包含where条件要查的值.好处是减少了大量的访问,毕竟索引通常远小于数据行的大小,只读取索引能大大减少数据访问量。在innoDB中索引中包含对应的值,可以不用访问主键(主索引).
 5.索引的最左前缀原则
 例如建立一个索引对应的列是:column1,column2,column3
 在实际中是产生了三个索引:(column1),(column1,column2),(column1,column2,column3),所以建议最左边的这个column1要是用散列度高的列可以提高查询的性能,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值