MySQL InnoDB索引

MySQL InnoDB索引

1. 什么是索引,为什么要使用索引,都有哪些索引

mysql中的索引是一种数据结构,主要为了提高查询的效率,主要有B+树、Hash、全文检索索引

2. InnoDB 为什么索引使用B+树呢

主要就是快,为什么快,因为其他索引慢。一定慢吗?综合情况下查询慢。

  • 比如二叉树,没有办法平衡,影响效率
  • 比如平衡二叉树,总树高太深,可能一张表都无法存储下,影响效率
  • 比如B树,每个节点都会存储数据,那么一页下存储的数据就会变少,影响效率
  • 那么B+树优点
    • 数据只存在叶子节点上并且有序,而且相邻节点中使用指针相互指向
    • 聚簇索引下,非叶子节点不存储数据,使页数据存储更多的索引节点
    • B+树比B树树高低,减少IO次数,增加使用效率
    • B+树比B树查询效率稳定
    • 一般B+树大概2~4层,存储数据大概2万 ~ 200亿

3.索引类型

聚簇索引

在创建表的时候就会生成一个唯一B+树,当没有主键时候,InnoDB会选择一个唯一的非空索引代替主键,如果还没有,InnoDB 会隐式定义一个rowid为聚簇索引

非聚簇索引

叶子节点包括一个列值和一个主键id,如果查询的内容在索引上没有叫做回表,如果有叫做覆盖索引。

联合索引

多个列的索引,按照列的顺序依次排序。(注:当创建(a,b)索引,where b=xx and a=xx,也是会走索引的,因为有优化选择器存在)

自适应HASH索引

命中某个页大于总数据的1/16时候自动创建这个索引,无需干预。

4.索引的创建

  • FIC 快速创建索引,在InnoDB1.0.x引入(mysql5.5),在表上加S(共享)锁。(注:如果有写操作不可用)。删除索引,将索引空间内存标记为可用
  • Online DDL(5.6之后),辅助索引创建和删除,改变自增长id,重命名列
    • NONE 模式 ,没有什么限制,就是快
    • SHARE 模式,加S锁
    • EXCLUSIVE 模式,加X(排查)锁

5.索引使用

## 查看索引
SHOW INDEX FROM 表名;
## 建立联合索引,(第一条对主键可以)
ALTER TABLE 表名 ADD INDEX 索引名(列名1,列名2)
CREATE INDEX 表名on 索引名(列名1,列名2)
## 删除索引,(第一条对主键可以)
ALTER TABLE 表名 DROP INDEX 索引名
DROP INDEX 索引名 ON 表名

6.索引创建因素

  • select count(distinct(column_name))/count() from table_name; 超过0.5 或 show index 查看cardinality / count() 的数量 就创建索引
  • 选择不经常更新的字段
  • 选择value数据比较小的字段

7.索引失效 11种 情况

其他大佬的地址讲得很清楚: https://blog.csdn.net/xueping_wu/article/details/125835974

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值