一、什么是索引?
索引是帮助mysql高效获取数据的数据结构,其本质就是排好序的快速查找数据结构。
二、索引的优缺点
优点:
1、提高数据的检索效率;
2、降低数据排序的成本
缺点:
1、索引也是一张表,该表保存了主键和索引字段,并执行实体表的记录,所以索引列也需要占用空间;
2、增删改表中的数据需要维护索引,会降低操作效率
三、索引的分类
1、单值索引:一个索引只包含单个列,一张表可以有多个单列索引
2、唯一索引:索引列的值必须唯一,但允许有空值
3、复合索引:一个索引包含多个列
4、主键索引
四、索引的操作
1、创建
- create [unique]index 索引名称 on 表名(列名)
2、删除
- drop index 索引名 on 表名
3、使用alter
- alter table 表名 add index 索引名(列名)
- alter table 表名 add unique 索引名(列名)
- alter table 表名 add primary key(列名)
4、查看
- show index from 表名
五、索引的结构
【查找过程】
如果要查找数据项29,首先会把磁盘块1由磁盘加载到内存,此时发生一次IO,在内存中用二分查找确定29在17和35之间,锁定磁盘款1的P2指针(内存时间很短,可以忽略不计);通过磁盘块1的P2指针的磁盘地址把磁盘块3由磁盘加载到内存,发生第二次IO;29在26和30之间,锁定磁盘块3的P2指针,通过指针加载磁盘块8到内存,发生第三次IO,同时内存中做二分查找找到29,结束查询,总计3次IO.
六、不适合创建索引的情况
- 表记录太少
- 频繁增删改的表
- where条件子句中使用不到的字段
- 数据重复且分布平均的表字段 -- 如果某个数据列包含许多重复项,建立索引不会有太大的实际效果