mysql索引

1.什么是索引

索引相当于我们的目录,目的是为了提高我们的查询速率

2.索引的分类

(1)从物理存储的角度分为

  • 聚簇索引:一张表只有一个聚簇索引
  • 非聚簇索引,又叫二级索引:可以有多个

(2)从逻辑角度分为

  • 普通索引
  • 唯一索引
  • 主键索引
  • 全文索引

(3)从作用段字数分为

  • 单列索引
  • 联合索引

3.那些情况下不适合建立索引

  • 在where中用不到的字段
  • 数据量小的情况下
  • 经常更改数据的表上不适合建立索引
  • 有大量重复的列上不适合建立索引

4.什么情况下索引会失效

  • 以%开头的like查询,如%zjy,此时索引会失效;但是不以%开头的则不会失效,如zjy%
  • 如果mysql使用全表查询要比索引查询快
  • 查询条件以or连接的
  • 在索引列上使用 !=、函数
  • 查询条件中类型为字符串,但是查询过程中么有使用' '的,如:select * from user where name = zjy
  • 组合索引中未使用最左前缀的,如组合索引(name,age),where age=18

5.索引的缺点

  • 降低维护速度,比如说在增、删、改的时候
  • 耗费时间,数据量越大,查询时间越长
  • 占用物理和数据空间

6.B+树和B树的区别

  • B+树中数据只存储在叶子节点中,叶子节点构成一个有序链表,非叶子结点只用于索引;而B树的叶子节点和非叶子结点都存储了数据
  • B+树有k个孩子的节点就有k个关键字。也就是孩子数量=关键字数,而B树中,孩子数量=关键字数+1。

7.为什么B+树比B树更适合索引

  • B+树查询更稳定。对于三层的B+数而言,每次查询都需三次;而B树查询则不一定,1-3次都有可能。
  • B+树磁盘读写代价更低。B+树的节点只存储索引key值,具体信息的地址存在于叶子节点的地址中。这就使以页为单位的索引中可以存放更多的节点。

8.B+树的存储能力?为何一般查找行记录,最多只需1-3次磁盘IO?

        InnoDB存储引擎的大小是16KB,主键为int(4个字节)或BIGINT(8个字节),指针类型一般是4或8个字节,一页=16KB/(8B+8B)= 1K = 1000个键值,深度为3的B+树可以存1000*1000*1000=10亿记录。

         其实每个节点不一定都能填满,所以在数据库中B+树深度为2-4层,InnoDB中根节点常驻内存,所以最多只需1-3次磁盘IO。

9.InnoDB中的B+树

 10.InnoDB的注意事项

11.MyISAM中的B+树

 12.B-Tree

 13.hash结构

 14.最左匹配

组合索引中,从最左边开始索引,当遇到范围查询(><betweenlike)就会停止匹配,后面的字段不会用到索引

  • (a,b,c)建立索引,查询条件使用 a/ab/abc 会走索引,使用 bc 不会走索引。
  • 索引是先根据a排序,a相同时b有序,a不同无序,以此类推。总之遇到范围查询就停。

15.覆盖索引

如果索引的叶子节点包含了要查询的数据,那么就不用回表查询了,也就是说这种索引包含(亦称覆盖)所有需要查询的字段的值,我们称这种索引为覆盖索引。

16.前缀索引

前缀索引也叫局部索引,前缀索引是指对文本或者字符串的前几个字符建立索引,这样索引的长度更短,查询速度更快。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值