目录
索引
索引概念
MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。
优势与劣势
优势
提高数据检索的效率,降低数据库的IO成本
通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗
劣势
索引也是一张表,该表中保存了主键与索引字段,并指向实体类的记录,所以索引列也是要占用空间的
虽然索引大大提高了查询效率,在insert、update、delete操作时,MySQL不仅要保存数据,还要保存索引文件每次改动列的字段,都会调整因为更新所带来的键值变化后的索引信息
索引结构
索引是在MySQL中的存储引擎层中实现的,不是服务器层。所以每种存储引擎的索引实现方式或有不同。目前提供了以下4中索引:
B-TREE 索引:最常见
HASH 索引:只有Memory引擎支持,使用场景简单
R-tree 索引(空间索引):空间索引是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少
Full-text(全文索引):全文索引也是MyISAM的一个特殊索引类型,主要用于全文索引
注:聚类索引、复合索引、前缀索引、唯一索引默认都是使用B+tree索引,统称为 索引。
B-TREE结