mysql索引简介

数据库索引:
    数据库索引,是数据库管理系统(DBMS)中一个排序的数据结构,以协助快速查询、更新数据库表中数据。

辅助理解:
    数据是以文件的形式存放在磁盘上面的,每一行数据都有它的磁盘地址。如果没有索引的话,我们要从 500 万行数据里面检索一条数据,只能依次遍历这张表的全部数据(循环调用存储引擎的读取下一行数据的接口),直到找到这条数据。


常用索引分类:
    (1)单列索引
    (2)复合索引(有的也叫联合索引)

一、单列索引:
     顾名思义,就是在某个要查询的列上添加索引
     创建原则:
        索引创建要看数据的重复情况,也叫离散度
        重复值越高、离散度越低、在这种情况下可以不建立索引

二、复合索引:
    多条件查询时使用、遵循最左匹配原则,依次向右,最左匹配不到则不走索引

三、单列及复合同时使用:
    复合在最左原则中也会匹配到时,就没必要再创建单列
    
其实,用不用索引,最终都是优化器说了算。
优化器是基于什么的优化器?
基于 cost 开销(Cost Base Optimizer),它不是基于规则(Rule-Based Optimizer),也不是基于语义。怎么样开销小就怎么来。

使用索引有基本原则,但是没有具体细则,没有什么情况一定用索引,什么情况一定不用索引的规则,是具体业务情况而定。

索引失效的几种原因:

is null:索引不存储null ,将索引列值进行建树,其中必然涉及到诸多的比较操作。Null值的特殊性就在于参与的运算大多取值为null。
这样的话,null值实际上是不能参与进建索引的过程。也就是说,null值不会像其他取值一样出现在索引树的叶子节点

like '%XX'或者like '%XX%' : 都like了,肯定要全部匹配一下,走索引还有啥意思,干脆不走

or:如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)
要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引

如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引

如果mysql估计使用全表扫描要比使用索引快,则不使用索引(优化器)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值