MySQL联合索引or_MySQL联合索引命中条件

MySQL联合索引or_MySQL联合索引命中条件转于:https://blog.csdn.net/claram/article/details/77574600首先明确:为什么要用联合索引?对于查询语句“SELECTE.*FROMEWHEREE.e1=1ANDE.e3=2”涉及到两列,这个时候我们一般采用一个联合索引(e1,e3);而不用两个单列索引,这是因为一条查询语句往往应为mysql优化器的关系只用一个索引,就算你有两个索…

大家好,又见面了,我是你们的朋友全栈君。

转于: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 常量”,可触发索引的使用。

例如:SELECT E.* FROM E WHERE E.e1=1

3、使用部分索引键,但不是联合索引的前缀部分,如“key_part_2 常量”,不可触发索引的使用。

例如:SELECT E.* FROM E WHERE E.e3=1

4、使用联合索引的全部索引键,但索引键不是AND操作,不可触发索引的使用。

例如:SELECT E.* FROM E WHERE E.e3=2 OR E.e1=1

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/146056.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 在apk模拟器中安装和卸载apk文件「建议收藏」

    在apk模拟器中安装和卸载apk文件

    2022年3月12日
    70
  • c# 字典树_c++树的遍历

    c# 字典树_c++树的遍历c#入门Trie基于SortedDictionary添加查询非递归实现递归实现前缀基于SortedDictionary添加查询非递归实现递归实现前缀publicclassTrie{privateclassNode{publicboolIsWord;publicSortedDictionary<char,Node>Next;publicNode(boolisWord)

    2025年8月29日
    3
  • FabricJS gotchas/FabricJS陷阱[通俗易懂]

    FabricJS gotchas/FabricJS陷阱[通俗易懂]FabricJSgotchas这个页面包含了第一次接触fabricJS的人打开的最常见问题的列表。这些缺陷的产生,既有解释不清的原因,也有文档不完善的原因。在这里,我们试图解决共同的问题。Objectsarenomoreselectable-setCoords(对象不再是可选择的-setCoords)Fabric包含两组坐标以快速知道物体在画布上的位置。它们链接到两个对象属性:oCoords和aCoords。当用户与对象交互或结束变换(例如拖动)时,fabricJS会自动更新这些坐标。

    2025年8月5日
    3
  • pythonif语句格式_python中if语句的用法

    pythonif语句格式_python中if语句的用法if判断语句if判断语句的基本语法if要判断的条件:条件成立时,要做的事情注意:代码的缩进为一个tab键,或者四个空格(pycharm自动帮我们增加)在python开发中,Tab和空格不要混用判断语句演练一需求:1.定义一个整数变量2.判断是否满18岁(&gt;=)3.如果满18岁,允许进入网吧总结:…

    2022年9月26日
    2
  • pytest运行_ios怎么清理应用缓存在哪里

    pytest运行_ios怎么清理应用缓存在哪里前言pytest运行完用例之后会生成一个.pytest_cache的缓存文件夹,用于记录用例的ids和上一次失败的用例。方便我们在运行用例的时候加上–lf和–ff参数,快速运行上一

    2022年7月28日
    4
  • Linux rootfs_hdfs shell命令

    Linux rootfs_hdfs shell命令本文阐述Linux中的文件系统部分,源代码来自基于IA32的2.4.20内核。总体上说Linux下的文件系统主要可分为三大块:一是上层的文件系统的系统调用,二是虚拟文件系统VFS(VirtualFilesystemSwitch),三是挂载到VFS中的各实际文件系统,例如ext2,jffs等。本文侧重于通过具体的代码分析来解释Linux内核中VFS的内在机制,在这过程

    2022年9月28日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号