转于:https://blog.csdn.net/claram/article/details/77574600

首先明确:为什么要用联合索引?

对于查询语句“SELECT E.* FROM E WHERE E.e1=1 AND E.e3=2”涉及到两列,这个时候我们一般采用一个联合索引(e1, e3);而不用两个单列索引,这是因为一条查询语句往往应为mysql优化器的关系只用一个索引,就算你有两个索引,他也只用一个;在只用一个的基础之上,联合索引是会比单列索引要快的;

下面讲讲联合索引的使用规则和哪些情况会命中不了联合索引

示例如下。首先创建表:
CREATE TABLE E (e1 INT, e2 VARCHAR(9), e3 INT, PRIMARY KEY(e1, e3));
这样就建立了一个联合索引:e1,e3

测试数据

INSERT INTO E
(e1, e2, e3)
VALUES(1, 'aa', 2);

触发联合索引是有条件的:
1、使用联合索引的全部索引键,可触发索引的使用。
例如:SELECT E.* FROM E WHERE E.e1=1 AND E.e3=2

2、使用联合索引的前缀部分索引键,如“key_part_1 <op>常量”,可触发索引的使用。
例如:SELECT E.* FROM E WHERE E.e1=1

3、使用部分索引键,但不是联合索引的前缀部分,如“key_part_2 <op>常量”,不可触发索引的使用。
例如:SELECT E.* FROM E WHERE E.e3=1

4、使用联合索引的全部索引键,但索引键不是AND操作,不可触发索引的使用。
例如:SELECT E.* FROM E WHERE E.e3=2 OR E.e1=1

以上通过explain测试即可看出效果

最新文章

  1. CentOS 7 防火墙 firewall 的使用
  2. 速战速决 (5) - PHP: 动态地创建属性和方法, 对象的复制, 对象的比较, 加载指定的文件, 自动加载类文件, 命名空间
  3. window共享linux下的文件 samba
  4. Eclipse调试 : step into,step over,step return 说明
  5. A trip through the Graphics Pipeline 2011_12 Tessellation
  6. 基于jquery的响应式提示框SweetAlert
  7. Linux与Windows 解压乱码 UTF8BOM读取问题
  8. Dlib is a modern C++ toolkit(非常全面的类库)
  9. POJ-3140 Contestants Division (树)
  10. easy ui 表单提交添加遮罩,避免数据重复提交
  11. ionic开发android app步骤
  12. 认识Backbone (三)
  13. Java中引用的浅复制和深复制
  14. Rsync同步、Rsync+Lsync实时同步
  15. 货车运输-洛谷-1967-LCA+最大生成树(kruskal(并查集))
  16. Foundation框架 - 结构体
  17. mysql索引与查询优化
  18. php批量检测和去掉bom头(转)
  19. NoSQLUnit
  20. [转帖]七牛云对HTTPS 的解释

热门文章

  1. Ruby中任务构建工具rake的入门学习教程
  2. Codeforces Round #352 (Div. 2) C. Recycling Bottles
  3. fuse的mount机制-流程及参数
  4. 查看识别hadoop是32位还是64位
  5. HihoCoder1705: 座位问题(STL)
  6. 泛型Class&lt;T&gt;和 T. &lt;T&gt;
  7. kubeadm安装Kubernetes13.1集群-三
  8. ubuntu scp命令或者用root连接ssh提示:Permission denied, please try again.错误
  9. UVa 1611 Crane (构造+贪心)
  10. E20170505-ms