索引的定义
是对数据库表中一列或多列的值进行排序的一种结构 mysql的索引是存储引擎层而不是在服务器层实现的,所以并没有统一的索引标准
索引好比书的目录,通过目录可以快速搜索到想要查找的内容,要了解索引的利弊,索引利用好了就是一辆"法拉利跑车",用不好就是一辆"破旧的三轮车"
查看表索引:
show index from 表名
InnoDB有两大类索引:
- 聚集索引(clustered index)
- 普通索引(secondary index)
InnoDB 聚集索引的叶子节点存储行记录,因此InnoDB必须要有,且只有一个聚集索引: (1)如果表定义了PK(PRIMARY KEY),则PK就是聚集索引; (2)如果表没有定义PK,则第一个not NULL unique列是聚集索引; (3)否则,InnoDB会创建一个隐藏的rowid作为聚集索引; 画外音:所以PK查询非常快,直接定位行记录
mysql中如果表没有加主键,InnoDB会创建一个隐藏的rowid来当作主键,也就是是否可以通过select _rowid from table查询出来
索引作用
- 优点 1 提高数据检索效率 2 提高聚合函数的效率 3 提高排序效率 4 使用覆盖索引可以避免回表(不懂?)
索引结构
1 二叉树结构 2 B Tree 3 哈希结构
二叉树结构
特点: 1 每个节点至多有2个子节点 2 有左右序之分,次序不能颠倒,左子树键值永远比右子树的小,且小于根键值
索引类型
1 主键索引和唯一索引 2 覆盖索引 (利用覆盖索引来进行查询操作,避免回表(开发手册索引规约)) 3 前缀索引
- 联合索引
联合索引又叫复合索引,是在表中2个或2个以上的列创建的索引,利用索引中的附加列可以缩小检索的段池范围,更快的搜索到数据,联合索引在使用的过程中必须满足最左前缀原则