先建表

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. Android fragment 回调函数改进

    由于fragment的onResume()等回调的调用时机与Activity不一样,导致用起来比较麻烦,所以我重新封装了一下回调函数,十分简单. 使用时只需要继承此基类,使用onFragmentXXX ...

  2. IBM Rational-完整的软件工程解决方案工具集

    IBM,即国际商业机器公司,1911年创立于美国,是全球最大的信息技术和业务解决方案公司,其业务遍及全球170多个国家和地区.IBM软件分为五个部分,其中Rational系列是专门针对软件工程的软件工 ...

  3. Java金字塔及变形

    Java金字塔 package com.tfj.test; public class JinZiTa { public static void main(String[] args){ int num ...

  4. URAL1012. K-based Numbers. Version 2

    链接 考查大数 正好拿来学习下JAVA JAVA好高端.. import java.io.*; import java.math.*; import java.text.*; import java. ...

  5. bzoj1443

    首先要思考的问题肯定是,什么点可以是ans, 不难想到对图黑白染色,假如一个棋子不管怎么走,都只能走到和它同色的点上时,这就是一个ans 再考虑,每次棋子的移动都是黑白相间的 再考虑,黑白染色是可以构 ...

  6. 使用OLEDB读取不同版本Excel数据的连接字符串设置

    摘要: 用OLEDB通过设置连接字符串可以像读取sqlserver一样将excel中的数据读取出来,但是excel2003和excel2007/2010的连接字符串是不同的/// summary // ...

  7. 如何使用eclipse进行嵌入式Linux的开发

    如何使用eclipse进行嵌入式Linux的开发 作者:曾宏安,华清远见嵌入式学院高级讲师. 如何使用eclipse进行嵌入式Linux的开发 习惯了在windows环境下开发的程序员在转到Linux ...

  8. java含多个包的命令行下执行

    C:\Users\liyang\Desktop\BAE\Baidu-BCS-SDK-Java-1.4.5>java -classpath(可以cp简写) bcs-sdk-java_1.4.5.j ...

  9. plsql的参数IN和OUT

    代码片段一 create or replace procedure scott.pro_para_inout(p_dname in out scott.dept.dname%TYPE, p_loc o ...

  10. NOIP2000 乘积最大

    题二  乘积最大              (22分)    问题描述      今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏 ...