MySql 索引的命中规则

在解释索引命中规则的前提下, 先了解一下如下原则:

最左匹配原则:

最左前缀匹配原则, mysql会一只向右匹配直到遇到范围查询(>, <, between, like)就停止匹配, 比如a=1 and b=2 and c>3 and d=4 如果建立了(a,b,c,d)顺序的索引, d是用不到索引的, 如果建立(a,b,d,c)的索引, 则都可以使用到, a,b,d的顺序可以任意调整.
= 和 in 可以乱序, 比如 a=1 and b=2 and c=3 建立(a,b,c)索引可以任意顺序, mysql 的查询优化器会帮你优化成索引可以识别的形式.

1.联合索引

使用情况:
对于查询语句"select e.* from e where e.e1=1 and e.e3=2"涉及到两列, 这个时候我们一般采用一个联合索引(e1, e3); 而不用两个单列索引, 这是因为一条查询语句往往应为mysql优化器的关系只用了一个索引, 就算你有两个索引, 他也只会用到一个(Mysql的最左匹配原则) ; 在只用到一个的基础上, 联合索引是会比单列索引要快的;

命中规则:
示例: create table e(e1 int, e2 varchat(9), e3 int, primary key(e1, e3));
这样就建立了一个联合索引: e1, e3

使用联合索引的全部索引键, 可触发索引的使用.
如: select e.* from e where e.e1=1 and e.e3=2
查询条件中包含索引的前缀部分, 也就是 e1, 可以触发索引的使用
如: select e.* from e where e.e1=1
使用部分索引键, 但不包含索引的前缀部分,不可触发索引的使用。
如: select e.* from e where e.e3=1
使用联合索引的全部索引键, 但不是AND操作, 不可以触发索引的使用
如: select e.* from e where e.e3=2 or e.e1=1
2.普通索引
就是最基本的索引, 查他就能命中

3. 唯一索引
和普通索引类似, 不同的就是索引的列必须是唯一存在的, 可以为空

4. 全文索引
只支持老版本的MySql 也就是引擎为MyISAM的数据表.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值