索引

2020-05-06  本文已影响0人  X1_blog

索引工作原理

设置一个唯一字段(主键)为索引, 将根据该字段按照指定的数据类型建立额外的有序数据, 下一次检索数据时不再使用全表查询(线性查询), 使用二进制搜索目标并返回对应的存储地址, 实现优化查询

缺点 :

  1. 索引会使用额外空间, 定义不必要的索引会造成空间和性能损耗

  2. 定义索引到一个重复字段会使性能下降到全表查询, 建议使用主键作为索引字段

总结 : 索引就是一本书的目录, 检索内容只要检索目录并跳转就可以; 但是目录本身也会占用一定的页数;假如一本书是1000页, 使用了索引(目录)就是1010页(1000页内容+10页目录)

什么是索引基数(Cardinality)

高基数: 基本使用了主键/唯一字段作为索引字段

普通基数: 使用带有重复记录的字段作为索引字段

低基数: 使用带有很多重复记录的字段作为索引字段, 可能会被系统自动优化为不使用索引

索引的类型

普通索引 唯一索引 空间索引 全文索引
NORMAL UNIQUE SPATIAL FULLTEXT

索引的意义 与优点

主键索引、唯一索引、一般索引、hash索引(memory存储引擎支持)、聚簇索引、空间索引、全文索引(MyISAM支持)

什么时候使用索引

在什么字段设置索引

  1. 作为查询条件的字段

  2. 经常进行排序,分组, 联合操作 的字段

索引方法

btree(b+树) hash
效率
模糊查询 支持 不支持
排序 支持 不支持
引擎支持 MyISAM , inndb ,MEMORY MEMORY(没有unique约束) (innodb只存在于内部, 不支持手动创建)
场景

为什么使用b+树作为索引的数据结构?

https://www.php.cn/mysql-tutorials-436372.html

索引的优点

1)大大减少了服务器需要扫描的数据量

2)可以帮助服务器避免使用临时表和文件排序

3)可以将随机I/O变为顺序I/O

InnoDB支持聚簇索引,MyISAM不支持聚簇索引;

InnoDB的聚簇索引和主键索引是一样的;主键索引的页子结点中存储的都是索引值以及行记录;非聚簇索引页子结点里存储的都是记录的物理地址;

MyISAM主键索引和非主键索引叶子节点中存储的都是记录的物理地址;

上一篇 下一篇

猜你喜欢

热点阅读