先建表

CREATE TABLE `menu_employee` (

`Id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键,无实际意义',

`employee_pid` int(5) DEFAULT NULL COMMENT '父节点序号,通常是部门的序号,可是已有例外,没有组的员工',

`employee_id` int(5) DEFAULT NULL COMMENT '员工序号,对应的部门序号+员工序号',

`employee_name` varchar(100) DEFAULT '' COMMENT '员工名称',

`action` varchar(100) DEFAULT NULL COMMENT 'action事件路径',

PRIMARY KEY (`Id`),

KEY`x` (`employee_id`,`employee_pid`) USING BTREE

) ENGINE=MyISAM AUTO_INCREMENT=38 DEFAULTCHARSET=utf8 COMMENT='员工表'

数据自己加入�.

好,開始測试:

写一个SQL,来跑一下试试

EXPLAIN

SELECT

employee_name

FROM

menu_employee

FORCE INDEX ( x )

WHERE

employee_id> 3

AND

employee_pid> 20

order by

  employee_pid

建一个索引,依照黄金律,把WHERE跟着了,一起建一个联合索引.

结果是:

是不是非常奇怪,明明了用了索引了,但是却依旧是 Using filesort!

 

好,接着我们改回单索引

 

 

再看结果:

 

是不是非常奇妙?

 

 

再试一下,那我们假设把索引列换成employee_id会肿么样呢,我们来试一试,

竟然没有什么效果,还是Using filesort!

 

单索引比复合索引有效果!并且还要选对要索引的列!

接下来说复合索引

先建表:

CREATE TABLE `l_insertlogs` (

`ID` int(10) NOT NULL AUTO_INCREMENT,

`Counts` int(10) DEFAULT NULL,

`TablesName` char(30) DEFAULT NULL,

`OperateTime` datetime DEFAULT NULL,

PRIMARY KEY (`ID`),

KEY`x` (`Counts`,`ID`) USING BTREE

) ENGINE=InnoDB AUTO_INCREMENT=6155 DEFAULTCHARSET=utf8

跑一下:

EXPLAIN

SELECT

TablesName

FROM

l_insertlogs

FORCE INDEX ( x )

WHERE

IDbetween 100 and 500

AND

Counts> 14

order by

  Counts

再来个索引,来一个复合双索引

结果一点也不好看

再试试,改成单的,用主键做列

还是不行

改成

这下即可了

所以说,双索引不一定有效,怎么使用要看实际情况,索引使用哪一列也是非常讲究的,这还是仅仅是表现,我还要接着深挖下去.

mysql选择联合索引还是单索引?索引列应该使用哪一个最有效?深入測试探讨的更多相关文章

  1. 使用复合索引代替单键索引,来避免单键有null值的情况

    查看原表: SQL> select count(*) from t1; COUNT(*) ---------- 3229088 SQL> select count(*) from t1 w ...

  2. 《高性能MySQL》——第五章创建高性能索引

    1.创建索引基本语法格 在MySQL中,在已经存在的表上,可以通过ALTER TABLE语句直接为表上的一个或几个字段创建索引.基本语法格式如下: ALTER TABLE 表名 ADD [UNIQUE ...

  3. 聚集索引、非聚集索引、聚集索引组织表、堆组织表、Mysql/PostgreSQL对比、联合主键/自增长、InnoDB/MyISAM(引擎方面另开一篇)

    参考了多篇文章,分别记录,如下. 下面是第一篇的总结 http://www.jb51.net/article/76007.htm: 在MySQL中,InnoDB引擎表是(聚集)索引组织表(cluste ...

  4. Mysql 创建联合索引注意事项

      当一个表有多条索引可走时,  Mysql  根据查询语句的成本来选择走哪条索引, 联合索引的话, 它往往计算的是第一个字段(最左边那个), 这样往往会走错索引. 如: 索引Index_1(Crea ...

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

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

  6. SQL Server中的联合主键、聚集索引、非聚集索引、mysql 联合索引

    我们都知道在一个表中当需要2列以上才能确定记录的唯一性的时候,就需要用到联合主键,当建立联合主键以后,在查询数据的时候性能就会有很大的提升,不过并不是对联合主键的任何列单独查询的时候性能都会提升,但我 ...

  7. mysql的联合索引的误解

    https://www.zhihu.com/question/36996520 之前对于联合索引有一个误区, 假设 name,age为一个联合索引 5条索引记录 a 10 b 5 c 12 c 15 ...

  8. mysql索引之七:组合索引中选择合适的索引列顺序

    组合索引(concatenated index):由多个列构成的索引,如create index idx_emp on emp(col1, col2, col3, ……),则我们称idx_emp索引为 ...

  9. mysql 单表索引优化

    建表语句 CREATE TABLE IF NOT EXISTS `article` ( `id` INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMEN ...

随机推荐

  1. 网络基本功(八):细说TCP滑动窗口

    https://community.emc.com/message/842129#842129

  2. chrome插件 postman插件 接口测试、API & HTTP 请求调试工具

    Postman 是一个非常棒的Chrome扩展,提供功能强大的API & HTTP 请求调试. 它能够发送任何类型的HTTP requests (GET, HEAD, POST, PUT..) ...

  3. Java-Swing嵌入浏览器(二)

    这是qtjambi利用webview来做嵌入式浏览器,下面是我的工程目录. 运行效果如下图: 代码相关: package qtBowers; import com.trolltech.qt.core. ...

  4. Item Import: What Does "Sync" Items Do? (Doc ID 417887.1)

    In this Document Goal Solution APPLIES TO: Oracle Item Master - Version 11.5.10.0 to 11.5.10.0 [Rele ...

  5. NOI2014 魔法森林

    3669: [Noi2014]魔法森林 Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 106  Solved: 62[Submit][Status] ...

  6. [OpenJudge] 平方和

    平方和 总时间限制: 3000ms 内存限制: 65536kB 描述 给出n(1<=n<=500000)个数字,下标从1开始 执行m(1<=m<=500000)次操作,操作可分 ...

  7. apache开源项目--hadoop

    Hadoop 是一个分布式系统基础架构,由Apache基金会开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力高速运算和存储.Hadoop实现了一个分布式文件系统(Had ...

  8. 常用px,pt,em换算表

    pt (point,磅):是一个物理长度单位,指的是72分之一英寸. px (pixel,像素):是一个虚拟长度单位,是计算机系统的数字化图像长度单位,如果px要换算成物理长度,需要指定精度DPI(D ...

  9. TreeMap源码解析

    1.TreeMap介绍 TreeMap是一个通过红黑树实现有序的key-value集合. TreeMap继承AbstractMap,也即实现了Map,它是一个Map集合 TreeMap实现了Navig ...

  10. HDU5668 Circle 非互质中国剩余定理

    分析:考虑对给定的出圈序列进行一次模拟,对于出圈的人我们显然可以由位置,编号等关系得到一个同余方程 一圈做下来我们就得到了n个同余方程 对每个方程用扩展欧几里得求解,最后找到最小可行解就是答案. 当然 ...