MYSQL 索引

什么是索引

为了提高查询的一种分散存储的数据结构

索引的优缺点

优点:
1.提高数据检索效率,降低IO成本
2.可以通过索引对数据进行排序,降低内存消耗
缺点:
1.占用磁盘内存
2.会影响表更新数据效率

索引原理

索引存储结构

  • 存储引擎决定
  • MyISAM和InnoDB存储引擎:只支持B+TREE索引,不能更换
B树和B+树
  • 树的高度会影响IO读写次数
  • 三层树结构支持数据可以达到20G,4层可以达到几十T

区别非叶子节点是否存储数据,B树会存,B+TREE不会存,B+TREE只有叶子节点才会存储数据,并且是有序的

非聚集索引(MyISAM)

数据和索引不存放在一起的,数据里会存放索引的地址(指针)

聚集索引(InnoDB)
  • 主键索引会存储数据行,索引和数据放在一起
  • 辅助索引只存储主键值 ,与MyISAM区别是MyISAM存的是索引地址
  • 如果没有主键索引,会使用唯一索引建立聚集索引

注意:非主键查询需要回表查询先查询辅助索引树获取主键,再在主键索引树上查询到数据

创建索引的情况

1.频繁查询的字段
2.关联查询时的关联字段
3.需要排序的字段
4.需要分组的字段

不需要创建索引

1.记录太少
2.频繁更新
3.where 条件使用频率不高的字段

为什么使用组合索引

节省索引存储空间

查看执行计划

EXPLAIN命令能够对sql查询语句进行分析,输出执行的详细信息,可以提供开发人员进行优化。
主要作用是观察是否使用到索引是否是全表扫描等。

type

从好到差顺序如下:

system,const,eq_ref,ref,fulltext,ref_or_null,unique_subquery,index_subquery,range,
index_merge,index,ALL

除了all之外,其他的type都可以使用到索引,除了index_merge之外,其他的type只可以用到一个索引
平时使用时最好使用到range级别
常见type解释:

const:使用唯一索引或者主键,返回记录一定是1行记录的等值where条件时
eq_ref:连接字段主键或者唯一性索引。此类型通常出现在多表的 join 查询, 表示对于前表的每一个结果, 都只能匹配到后表的一行结果.
ref:针对非唯一性索引,使用等值(=)查询非主键。或者是使用了最左前缀规则索引的查询。
range:索引范围扫描,常见于使用>,<,is null,between ,in ,like等运算符的查询中。

索引失效情况

  • 在索引列上做操作(计算、函数等),索引失效变成全表扫描
  • 使用不等于(!= 或者<>)
  • is null ,is not null l
  • like 以通配符开头"%"
  • 字符串不加单引号
  • or连接会导致索引失效

最左匹配原则

索引树上建立的索引是有序的,按照从左至右的顺序建立,查询时从最左边的索引开始,中间的索引不能中断,中断了只有前面的索引有使用到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值