数据库的常见的索引一般是单个字段,如果多个字段的组合,那么就组成了复合索引。对于组合索引,如果

对其中一字段做为条件查询,会出现什么情况呢?

一、例子

mysql> show create table watchdog\G
*************************** . row ***************************
Table: watchdog
Create Table: CREATE TABLE `watchdog` (
`index1` int() NOT NULL DEFAULT '',
`index2` int() NOT NULL DEFAULT '',
`dog` int() NOT NULL DEFAULT '',
PRIMARY KEY (`index1`,`index2`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 row in set (0.00 sec)

创建了以上数据表,索引是复合索引(index1, index2),针对以两种情况:

<>
select index1, index2
from watchdog
where index1 > and index1 < ;
<>
select index1, index2
from watchdog
where index2 > and index2 < ;

诚然,大多数人可能认为这两个情况索引都是一样的,至少我自己这么认为。

二、验证

对以上的两情况实验结果

<>
...
| | |
| | |
| | |
| | |
| | |
| | |
+---------+---------+ rows in set (0.09 sec)
<>
...
| | |
| | |
| | |
| | |
+---------+---------+ rows in set (1.68 sec)

两种情况的性能消耗时间相距甚远。其原因为何?

三、结果

查明原因,MySQL的复制索引在Where条件下有三种情形:

<1>没有用到复合索引

<2>只用到第一个索引

<3>用到全部的索引

所以,针对以上实验第二情况所使用到的第二个索引,起不了索引作用。

文档:

http://stackoverflow.com/questions/26255039/mysql-column-order-in-composite-key/26255121

http://dev.mysql.com/doc/refman/5.7/en/multiple-column-indexes.html

Note: explain命令虽可以解析sql语句,但具体还是要再斟酌一下。

Mysql 复合键索引性能的更多相关文章

  1. Mysql主键索引、唯一索引、普通索引、全文索引、组合索引的区别

    原文:Mysql主键索引.唯一索引.普通索引.全文索引.组合索引的区别 Mysql索引概念: 说说Mysql索引,看到一个很少比如:索引就好比一本书的目录,它会让你更快的找到内容,显然目录(索引)并不 ...

  2. 如何删除mysql 主键索引

    如果一个主键是自增长的,不能直接删除该列的主键索引, 应当先取消自增长,再删除主键特性   alter table 表名 drop primary key; [如果这个主键是自增的,先取消自增长.] ...

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

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

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

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

  5. ( 转 ) mysql复合索引、普通索引总结

    对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合 ...

  6. 千万级MySQL数据库建立索引,提高性能的秘诀

    实践中如何优化MySQL 实践中,MySQL的优化主要涉及SQL语句及索引的优化.数据表结构的优化.系统配置的优化和硬件的优化四个方面,如下图所示: SQL语句及索引的优化 SQL语句的优化 SQL语 ...

  7. MySQL索引性能分析

    为什么要做性能分析 你有没有这样的情况. 面对一个你没怎么写过的.复杂的业务,你构思了很久,终于开始敲下了第一段代码. 写的过程迷迷糊糊,有的时候还能把自己搞晕了. 但你还是终于把它写完了. 但是点击 ...

  8. mysql 高级和 索引优化,目的:查的好,查的快,性能好

    1-事物隔离级别: 更新丢失, 并发情况下,对同一字段进行更新,就会出现更新丢失,采用乐观锁,比较版本号或时间戳可解决 读未提交 解决了更新丢失但是会引起脏读, 二个session.sessionA中 ...

  9. 转://Oracle 复合压缩索引场景及性能对比

    摘要:今天为什么提到这个话题,出于一个偶然,一个同事在优化新开发的系统时向我请教如何添加复合压缩索引的问题.我总结了一下,问题有三. 第一:需不需要压缩 第二:对第几列压缩 第三:性能对比,选出最优 ...

随机推荐

  1. python学习笔记(一)

    1. BeautifulSoup是一个很好用的Python写的一个HTML/XML的解析器,它可以处理不规范标记并生成剖析树(parse tree).Beautifulsoup可以对便签Object进 ...

  2. c# 串口编程

    http://news.ccidnet.com/art/32859/20100524/2067861_4.html 字节缓冲器处理类: /// <summary> /// 字节缓冲器 // ...

  3. python发邮件

    # -*- coding:utf- -*- import smtplib,os,sys,string import mimetypes from email import Encoders from ...

  4. DDNS -VPN设置方法

    背景分析:一般情况下企业网络都是专线,也就是静态公网IP,但是也有一些是刚起步的小公司和一些网络需求不是很高的企业. 当前,由于公司是刚起步的小公司,网络是PPPOE拨号,但是又是总部和分部分开的,另 ...

  5. CentOS和Ubuntu下安装配置Greenplum数据库集群(包括安装包和源码编译安装)

    首先说一下,无论是CentOS/RedHat还是Ubuntu都可以按源码方式.安装包方式编译安装. 1.   规划 192.168.4.93(h93)       1个主master  2个主segm ...

  6. java并发编程_CountDownLanch(倒计数锁存器)应用场景

    使用介绍: 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 用给定的计数 初始化 CountDownLatch.由于调用了 countDown() 方法,所以在 ...

  7. CLR VIA C#事件

    事件是类型的一个成员,用来在事情发生的时候通知注册了该事件的成员. 事件和观察者模式十分的相似,所以事件应该提供如下几种能力 1.能让对象的方法登记对他的关注 2.能让对象的方法取消对他的关注 3.能 ...

  8. phpstorm

    9XVKERIY9F-eyJsaWNlbnNlSWQiOiI5WFZLRVJJWTlGIiwibGljZW5zZWVOYW1lIjoiYXNoZXIgY2hlbiIsImFzc2lnbmVlTmFtZ ...

  9. asp.net GDI+把图片绘制成自定义的椭圆形状

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  10. static 使用,静态变量

    由static修饰,属于整个类,被类对象共享, 可以由类名,对象名访问 static可以修饰变量,方法,代码块 public class HelloWorld { static String clas ...