引自https://my.oschina.net/857359351/blog/658668

第一张表gift和索引为联合索引,如图:

第二张表gift2为单列索引,如图:

下面开始进行测试:

相同的SQL分别查询两张表,使用EXPLAIN解析一下SQL

  select * from gift  where name = '道具' and scene_type=1;

  select * from gift2 where name=‘道具’ and scene_type=1;

显示的结果为两条SQL都会使用到索引,这我就不上图了。

然后只查询其中的某列,但是这个列已经创建索引

  select name,status from gift  where name = '道具' and scene_type=1;

  select name,status from gift2 where name=‘道具’ and scene_type=1;

显示的结果为两条SQL也都使用了索引。

继续查询没有创建索引的列,这里rank字段并没有创建索引

  select name,status,rank from gift  where name = '道具' and scene_type=1;

  select name,status,rank from gift2 where name=‘道具’ and scene_type=1;

显示的结果为两条SQL也都使用了索引。

接下来把SQL调整一下,name字段都建立了索引,下面把where条件里的name条件去掉

  select name,status from gift  where scene_type=1;

  select name,status from gift2 where scene_type=1;

显示的结果为两条SQL也都使用了索引。

  select name,status,rank from gift  where scene_type=1;

  select name,status,rank from gift2 where scene_type=1;

第一条SQL根本没有用到索引,第二条SQL还和以前一样,同样使用到了索引。

其实在联合索引上会有一个mysql索引最左匹配原则,但是如果联合索引的第一个列不在where条件语句中,并且所查询的列其中有的是没有建立索引的,那么这个联合索引就是无效的,具体为什么会这样我也还没有整明白(囧),不过以后再写SQL也会注意一下这方面的问题,而且公司DBA也建议如果使用联合索引,那么where条件也要尽量根据联合索引的顺序来,如果不按照顺序来,索引也同样会用到,但是在执行前,SQL优化器也会将条件调整为联合索引的顺序,既然可以直接避免这种情况,就没必要再让SQL优化器去处理,毕竟处理也是有开销的。

mySql单列索引与联合索引的区别的更多相关文章

  1. mysql索引 多个单列索引和联合索引的区别详解

    背景: 为了提高数据库效率,建索引是家常便饭:那么当查询条件为2个及以上时,我们是创建多个单列索引还是创建一个联合索引好呢?他们之间的区别是什么?哪个效率高呢?我在这里详细测试分析下. 一.联合索引测 ...

  2. MySQL单列索引和联合索引

    MySQL单列索引和联合索引   所有的MySQL列类型能被索引.在相关的列上的使用索引是改进SELECT操作性能的最好方法. 一个表最多可有16个索引.最大索引长度是256个字节,尽管这可以在编译M ...

  3. MySQL索引 索引分类 最左前缀原则 覆盖索引 索引下推 联合索引顺序

    MySQL索引 索引分类 最左前缀原则 覆盖索引 索引下推 联合索引顺序   What's Index ? 索引就是帮助RDBMS高效获取数据的数据结构. 索引可以让我们避免一行一行进行全表扫描.它的 ...

  4. 【mysql】mysql中单列索引、联合索引、Join联表查询建立索引 和 EXPLAIN的分析使用

    2.创建联合索引,从坐到右分别为:userid.openId.name   2. #### --------------  多表联合查询 update 2019/03/13  ------------ ...

  5. mysql单列索引和联合索引的使用

    1,首先要确定优化的目标,在什么样的业务场景下,表的大小等等.如果表比较小的话,可能都不需要加索引. 2,哪些字段可以建索引,一般都where.order by 或者 group by 后面的字段. ...

  6. 面试|简单描述MySQL中,索引,主键,唯一索引,联合索引 的区别,对数据库的性能有什么影响(从读写两方面)

    索引是一种特殊的文件(InnoDB 数据表上的索引是表空间的一个组成部分),它们 包含着对数据表里所有记录的引用指针. 普通索引(由关键字 KEY 或 INDEX 定义的索引)的唯一任务是加快对数据的 ...

  7. 简单描述 MySQL 中,索引,主键,唯一索引,联合索引 的区别,对数据库的性能有什么影响(从读写两方面) ?

    索引是一种特殊的文件(InnoDB 数据表上的索引是表空间的一个组成部分),它们 包含着对数据表里所有记录的引用指针. 普通索引(由关键字 KEY 或 INDEX 定义的索引)的唯一任务是加快对数据的 ...

  8. 【Mysql】InnoDB 中的聚簇索引、二级索引、联合索引

    接上一篇内容. 一.聚簇索引 其实之前内容中介绍的 B+ 树就是聚簇索引. 这种索引不需要我们显示地使用 INDEX 语句去创建,InnoDB 引擎会自动创建.另外,在 InnoDB 引擎中,聚簇索引 ...

  9. mysql b-tree 索引下联合索引的顺序测试方案

    使用联合索引需要注意的列顺序比如在使用select * from user where x=1 and y=2;的时候,应该需要建立的索引可能是 add key(x,y)如何确定索引的顺序一般经验而言 ...

随机推荐

  1. 用R的dgCMatrix包来构建稀疏矩阵 | sparse matrix by dgCMatrix

    sparse matrix是用来存储大型稀疏矩阵用得,单细胞表达数据基本都用这个格式来存储,因为单细胞很大部分都是0,用普通文本矩阵存储太占空间. 使用也是相当简单: library("Ma ...

  2. java ----> 类转换异常

    com.rr.domain.Department_$$_javassist_5 cannot be cast to javassist.util.proxy.Proxy 两个原因: 1.懒加载 在we ...

  3. 老老实实学WCF

    老老实实学WCF 第三篇 在IIS中寄宿服务 通过前两篇的学习,我们了解了如何搭建一个最简单的WCF通信模型,包括定义和实现服务协定.配置服务.寄宿服务.通过添加服务引用的方式配置客户端并访问服务.我 ...

  4. Practical Node.js (2018版) 第4章: 模版引擎

    Template Engines: Pug and Handlebars 一个模版引擎是一个库或框架.它用一些rules/languages来解释data和渲染views. web app中,view ...

  5. SqlSever查询某个表的列名称、说明、备注、注释,类型等

    这周整理了数据库文档,发现用导出脚本来整理表的信息注释查看不方便,因此我就想能不能SQL语句查询表的注释或者表的字段.我就我问朋友是不是可以,他给我点指导,然后自己也在网上百度,来实现自己的想法,我把 ...

  6. 了解一下express中间件的意思以及next()

    app.use()就是通常所说的使用中间件 一个请求发送到服务器后,它的生命周期是 先收到request(请求),然后服务端处理,处理完了以后发送response(响应)回去,而这个服务端处理的过程就 ...

  7. ABAP游标

    DATA: BEGIN OF count_line, carrid TYPE spfli-carrid, count TYPE i, END OF count_line, spfli_tab TYPE ...

  8. new 和 delete

    new 和 delete 众所周知,C中的malloc和free是用来申请和释放内存的,相应的C++中也有对应的申请和释放内存的操作,即是new和delete,但是C++的new和delete比C中的 ...

  9. iOS 强大第三方资源库

    Github用法 git-recipesGit recipes in Chinese. 高质量的Git中文教程. lark怎样在Github上面贡献代码 my-git有关 git 的学习资料 giti ...

  10. 更改pip源至国内镜像

    更改pip源至国内镜像   经常在使用Python的时候需要安装各种模块,而pip是很强大的模块安装工具,但是由于国外官方pypi经常被墙,导致不可用,所以我们最好是将自己使用的pip源更换一下,这样 ...