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 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:辅助索引
叶子结点,列值排序之后,存储到叶子结点+对应的主键的值,便于回表查询
原文:https://www.cnblogs.com/yeyangsen/p/10414215.html