索引的类型
- 聚簇索引
使⽤记录的主键值的大小进行记录和数据⻚的排序(页内、页间),叶⼦节点存储的是完整的⽤户记录。聚簇索引就是数据的存储方式。 - 二级索引
使⽤记录的非主键列值(指定列)进⾏记录和⻚的排序(页内、页间),叶⼦节点存储的是列和对应主键值。 - 联合索引
本质上还是二级索引,但是有多个列共同排序决定大小。
创建索引
分为建表时创建和建表后创建,建表时创建直接在建表语句后声明索引,建表后创建用ALTER语句添加索引。
- 主键索引
ALTER TABLE table_name ADD PRIMARY KEY index_name (column_name)
- 唯一索引
ALTER TABLE table_name ADD UNIQUE index_name (column_name)
- 普通索引
ALTER TABLE table_name ADD INDEX index_name ( column_name )
- 全文索引
ALTER TABLE table_name ADD FULLTEXT index_name ( column_name )
- 多列索引
ALTER TABLE table_name ADD INDEX index_name ( `column1`, `column2`, `column3` )
索引优化
哪些情况适合创建索引:
- 主键自动建立唯一索引;
- 频繁作为查询的条件的字段应该创建索引;
- 查询中与其他表关联的外键字段应该建立索引;
- 查询中排序的字段应该建立索引;
- 查询中统计或者分组字段应该建立索引;
- 单值/组合索引的选择问题(在高并发下倾向创建组合索引);
哪些情况不要创建索引:
- 频繁更新的字段不适合创建索引;
- where条件里用不到的字段不创建索引;
- 表记录太少;
- 经常增删改的表;
- 如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。