当前位置:   article > 正文

面经:mysql索引_索引优化 面经

索引优化 面经

1. 数据结构

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

2. 查询性能和原理

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

3.mysql索引

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

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

3.2 哈希索引
使用InnoDB的基本所有查询的时间复杂度是O(lg n),包含grup by,order by.
哈希索引的单点查询时间复杂度是O(1),如果是grup by,order by是O(n).
  • 1
  • 2
3.3 全文索引
MyISAM支持全文索引,而InnoDB也是在 MySQL 5.6.4 版本中也开始支持全文索引.
  • 1
3.4 空间数据索引
MyISAM 存储引擎支持空间数据索引(R-Tree),可以用于地理数据存储。空间数据索引会从所有维度来索引数据,可以有效地使用任意维度来进行组合查询。必须使用 GIS 相关的函数来维护数据。
  • 1
3.5 索引优化
 1.索引支持单列索引和多列多列索引,在索引的选用中一般会要选择散列度高.
 2.在多列索引中,一般要将散列度(选择度)高的索引放在前面,这样性能更好.
 3.对应要储存字符串的列(varchar,text..)加索引时要添加前缀索引.
 4.覆盖索引,即索引中包含where条件要查的值.好处是减少了大量的访问,毕竟索引通常远小于数据行的大小,只读取索引能大大减少数据访问量。在innoDB中索引中包含对应的值,可以不用访问主键(主索引).
 5.索引的最左前缀原则
 例如建立一个索引对应的列是:column1,column2,column3
 在实际中是产生了三个索引:(column1),(column1,column2),(column1,column2,column3),所以建议最左边的这个column1要是用散列度高的列可以提高查询的性能,
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/739967
推荐阅读
相关标签
  

闽ICP备14008679号