索引是什么?
索引是mysql对数据库表的一列或者多列的值进行排序的一种数据结构。类似于字典
索引的本质就是缩小检索范围
索引的用途:可以大大的提高查询速度
索引的优缺点?
优点:
1.索引大大的提高了数据检索速度,这也是建立索引的原因,
2.将随机io变成顺序io
3.索引可以帮助系统避免排序和创建临时表(orderby 是要创建临时表的)假定索引是(city,username) 只要保证city这个索引上取出来的行天然就是按照name递增排序的话,就可以不用再排序了。
缺点:
1.索引是保存在磁盘里的,磁盘的查询消耗是内存的消耗的10倍 也浪费空间资源
2.建立索引和维护索引需要消耗大量的时间
3.数据表更新的时候,索引也要跟着更新,数据更新成本大
4 如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。
建立索引的准则:
可以建索引的值:
1.主键
2.我们经常用到的字段(经常作为查询条件的字段,用于join的字段,orderby的排序字段,like的检索字段)
不可以建索引的值:
1.不经常使用的字段
2.经常更新的字段(更新成本高)
3.有大量重复值的字段比如性别
索引的类型:
b+树和hash
innodb引擎默认的是b+树索引
b+树索引支持范围查询,查询的速度差不多,
hash索引只支持等值查询,不支持范围查询,查单条数据的速度大于b+树索引
聚簇索引和非聚簇索引
索引和数据放在一起的是聚簇索引,否则是非聚簇索引
聚簇索引访问速度更快