mysql索引入门

什么是索引呢?索引是一种数据结构,是为了加快查找的速度,mysql默认使用B+树索引。

什么是B+ 树?这得从平衡二叉树说起,平衡二叉树是每一个子树的高度差的绝对值不超过1,这样导致查找数据的时间复杂度为n(logN),但是它也有问题,就是他是一个二叉树,所以如果有海量的数据,必当深度很深,所以就引入了B树,最开始几个版本的mysql就是用的B树,B树就是可以允许多子链接的平衡树,这样每一个节点都有很多子树,就可以明显降低树的深度;而进一步改进,就是B+ 树,B+树就是在B树的基础上,数据只存在叶子节点上,这样就节约索引的空间,同样空间能建立更多索引;而在叶子节点上,每一个节点又有链相连,这样读取几块叶子节点的数据,就可以不用重新查找,节约时间。

那应该在什么列建索引呢?

1、在维度高列,就是重复数据小的列建索引;

2、经常建立order by ,where,group by的列建立索引。

3、数据量小的列,比如数字编号,不要在数据量大的列建索引,这样会导致索引占的空间很大。

索引也不是越多越好,这是因为:

1、数据量小的不用建立索引;

2、增加额外的磁盘空间;

3、每增删改一次就得从新建立索引

建索引一定会变快吗?

不一定

1、查询属性不涉及创建索引的属性

2、查询时返回的结果数量是整个表数量的10%以上时

3、查询的种类与索引的种类不符,比如hash索引不能够提高范围查询的效率

创建索引会使查询操作变得更加快速,但是会降低增加、删除、更新操作的速度,因为执行这些操作的同时会对索引文件进行重新排序或更新

什么时候不走索引?

1、索引列参与计算,不走索引(SELECT sname FROM stu WHERE age+10=30;)

2、如果条件中有or,即使其中有条件带索引也不会使用。换言之,就是要求使用的所有字段,都必须建立索引,建议大家尽量避免使用or关键字。

复合索引:

复合索引也叫组合索引;

用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引)。

复合索引在数据库操作期间所需的开销更小,可以代替多个单一索引;    

同时有两个概念叫做窄索引和宽索引,窄索引是指索引列为1-2列的索引,宽索引也就是索引列超过2列的索引;     

设计索引的一个重要原则就是能用窄索引不用宽索引,因为窄索引往往比组合索引更有效;

索引类型:

普通索引:仅加速查询

唯一索引:加速查询 + 列值唯一(可以有null)

主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个

组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并

全文索引:对文本的内容进行分词,进行搜索

ps.索引合并,使用多个单列索引组合搜索

覆盖索引,select的数据列只用从索引中就能够取得,不必读取数据行,换句话说查询列要被所建的索引覆盖

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值