首页 > 数据库技术 > 详细

Mysql索引之理论知识

时间:2019-02-21 19:41:37      阅读:213      评论:0      收藏:0      [点我收藏+]

一:索引介绍

1:什么是索引?

  索引就好比是一本书的目录,它会让你更快的找到内容,让你获取数据更有目的性,从而提高数据库检索数据的性能。

2:索引作用:

  优化查询 select

  查询的三种情况:①缓存查询 redis

          ②全表扫描

          ③索引扫描

  查询效率  ① > ③  > ②

二:索引种类

索引的种类

  Btree (btree  b+tree  b*tree)    mysql默认用的是Btree

  Rtree

  HASH

  FullText

 

1: b+tree:

技术分享图片

 

2: b*tree:

 

技术分享图片

基本原理同b+tree,不同的是在枝节点,也存入了相邻枝节点的地址,目的也是为了方便范围查询

 

三:Btree分类

一:btree分类(这里的分类不涉及btree  b+tree  b*tree  都指btree)

1:聚集索引

  基于主键,自动生成的,一般是建表时创建主键.如果没有主键,自动选择唯一键做为聚集索引 (主键一般设置为id列,理由是int类型所占的内存小,而叶子节点大小是固定的,如果用string类型来来作为主键设置索引,同一叶子节点存储的索引数量少了,那么必然会产生更多的叶子节点存储索引,这样整个树的高度就会变高,查询效率就会变慢)

2:辅助索引

  人为创建的(普通,覆盖),如有大量这样的select条件: where  name = “xxx”  那么就可以根据name字段创建辅助索引,叶子节点存储该列值和该列值的id值(聚集索引值),存储该列值的id值是为了回表查询,如需求不仅仅是查找到名字,还要查找age,gender,那么这个时候就需要根据id值回表查询,扫描聚集索引建的树。如果建立的是覆盖索引(name,age,gender三个字段)此时就没有回表的需要。

3:唯一索引

  人为创建(普通索引,聚集索引)

 

二:聚集索引和辅助索引的对比

1:聚集索引

  叶子结点,按照主键列的顺序,存储的是整行数据,就是真正的数据页

2:辅助索引

  叶子结点,列值排序之后,存储到叶子结点+对应的主键的值,便于回表查询

Mysql索引之理论知识

原文:https://www.cnblogs.com/yeyangsen/p/10414215.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!