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

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

一、例子

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. Mono addin 学习笔记 3

    典型的基于Mono addin插件框架的应用程序有以下一个部分组成: 1. 主应用程序:提供了一系列的扩展点(Extension Point)供其他应用进行扩展: 2. 扩展插件: 其部署结构图如下为 ...

  2. the philosophy behind of the design of the STL

    The concept of STL is based on a separation of data and operations. The data is managed by container ...

  3. cs11_c++_lab2

    Matrix.hh class Matrix { int row; int col; int *p; public: Matrix(); Matrix(int x,int y); ~Matrix(); ...

  4. 京东B2B的4种供销模式

    B2B的4种供销模式,以京东商城为例: FBP     京东给商家一个独立操作的后台, 商家五地入库(北京,上海,广州,成都,武汉),从仓储 到配送 到客服都是京东来操作, 京东本身自营的产品所有能享 ...

  5. win8系统安装xampp后apache无法启动

    根据提示判断为端口被占用: 处理方法: 右击左下角windows图标,选择运行,调了同cmd; 依次排除80及443端口占用情况: netstat -ano|findstr "80" ...

  6. 编程范式 epesode2 negative values, float 精度

    episode2 //it is very interesting,an excellect teacher,  I love it 1,why negative is indicated the w ...

  7. 关于64位windows2003 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0” 的问题

    我了个去啊! 在自己机器上测试通过的excel导入功能在客户服务器上死活都不好用,查了半天后来发现客户服务器是64位的win2003!! try catch捕捉问题为:未在本地计算机上注册“Micro ...

  8. javascript中document.appendChild和document.body.appendChild的问题

    在IE7中 var conentDiv = document.createElement("div"); document .body .appendChild(conentDiv ...

  9. 通过反射向将EF的实体映射配置加入到实体模型中

    public AdminDbContext() : base("MemberDbContext") { //不使用代理创建导航属性,避免WCF序列化错误 Configuration ...

  10. Oracle SQL*plus常用的命令和函数

    常用命令: 连接sqlplus命令行下运行cmd进入,如以sys模式登陆,命令如下:(1).sqlplus "sys/zhb126 as sysdba" (2).sqlplus/n ...