索引本质数数据结构,排好序的快速查找数据结构,可以提高查找效率。数据分身之外,数据库还维护着一个满足特定查找算法的数据结构,这是数据结构可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引
索引的分类
主键索引
单值索引 :一个索引只包含单个列,一个表可以有多个单列索引。如果字段会被经常用来检索就可以单值索引。
复合索引:一个索引包含多个列,如电话簿上姓 + 名字,最好不超过5个字段
唯一索引:所有列的值必须唯一,但是允许有空值。
普通索引和唯一索引可以称为辅助索引。
劣势:
实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,索引列也是要占用空间的。
虽然索引大大提高了查询的速度,但是会降低更新表的速度,如对表进行insert,update,delete。因为更新表示,Mysql不仅要保存数据,还要保存一下索引文件,每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信息。
索引只是提高效率的一个因素,如果Mysql有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询。
什么时候需要建立索引
主键自动建立唯一索引
频繁作为查询条件的字段应该创建索引
查询中与其他表关联的字段,外键关系建立索引
频繁更新的字段不适合创建索引,因为每次更新不单单是更新了记录还会更新索引
where条件里用不到的字段不创建索引
单键/组合索引的选择问题,在高并发倾向创建组合索引
查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度
查询中统计或者分组字段(group by)
B站:尚硅谷Linux运维面试题(大厂linux面试题攻略)哔哩哔哩bilibili