博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
联合索引最左匹配
阅读量:6820 次
发布时间:2019-06-26

本文共 1079 字,大约阅读时间需要 3 分钟。

假设有联合索引 idx1(a,b,c)
 
下面的SQL可完整用到索引。
1.SELECT ... WHERE b=? AND c=? AND a=?;
2.SELECT ... WHERE b=? AND a=? AND c=?;
3.SELECT ... WHERE a=? AND b IN(?,?) AND c=?;
4.SELECT ... WHERE a=? AND b=? ORDER BY c;
5.SELECT ... WHERE a=? AND b IN(?,?) ORDER BY c;
6.SELECT ... WHERE a=?  ORDER BY b,c;
7.SELECT ... ORDER BY a,b,c;
 
而下面几个SQL则只能用到部分索引,或者可利用到ICP特性(5.6起)
1.SELECT ...WHERE b=? AND a=? --只能用到(a,b)部分。
2.SELECT ...WHERE a IN (?,?) AND b=?; --只用到(a,b) 部分,同时有ICP。
3.SELECT ...WHERE (a BETWEEN ? AND ?) AND b=?; --只用到(a,b) 部分,同时有ICP。
4.SELECT ...WHERE a=? AND b IN (?,?); --只用到(a,b)部分,同时有ICP。
5.SELECT ...WHERE a=? AND (b BETWEEN ? AND ?) AND c=?; --可用到(a,b,c)整个索引,同时有ICP。
6.SELECT ...WHERE a=? AND c=?;--只用到(a)部分索引,同时有ICP。
7.SELECT ...WHERE a=? AND c>=?;--只用到(a)部分索引,同时有ICP。
 
ICP(index condition pushdown)是MySQL5.6的新特性,其机制会让索引的其他部分也参与过滤,减少引擎层和server层之间的数据传输和回表请求,通常情况下可大幅提升查询效率。
 
 
下面几个SQL完全用不到索引
1.SELECT ...WHERE b=?;
2.SELECT ...WHERE b=? AND c=?;
3.SELECT ...WHERE b=? AND c>=?;
4.SELECT ...ORDER BY b;
5.SELECT ...ORDER BY b,a;
 

转载于:https://www.cnblogs.com/liang545621/p/9401460.html

你可能感兴趣的文章
jquery-datatables
查看>>
Java集合<8> (Map)
查看>>
Linux chmod命令详解
查看>>
kubernetes部署rabbitmq集群
查看>>
机器学习基础---最大似然估计
查看>>
使用xtrabackup备份mysql8.0.16
查看>>
安装apache遇到的几个错误及解决办法 [error] Apache2.2: Service is already installed.
查看>>
Spring Security源码分析一:Spring Security认证过程
查看>>
Dubbo环境搭建
查看>>
[数据结构]插入排序与希尔排序
查看>>
如何高效利用GitHub
查看>>
Server-sent Event 简单介绍
查看>>
nginx 常用的几个命令
查看>>
解决命令行的乱码以及编码的问题
查看>>
python naming convention
查看>>
Linux 程序获取环境变量
查看>>
Kettle资源库的创建及密码修改
查看>>
NASA顶级程序员编程十大原则
查看>>
Linux Kernel 4.14 LTSI正式推出
查看>>
NodeJS基础
查看>>