先建表

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. 索引利弊,如何创建索引,单键索引还是组合索引

    ** 索引的利弊与如何判定,是否需要索引** 相信读者都知道索引能够极大地提高数据检索的效率,让Query 执行得更快,但是可能并不是每一位朋友都清楚索引在极大提高检索效率的同时,也给数据库带来了一些 ...

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

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

  3. mysql联合索引和单索引_mysql联合索引跟单列索引的区别

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

  4. mysql 联合索引 单个索引_mysql的单例索引和联合索引

    --联合索引查询第一个.第二个参数(走索引) explain select* from emp where ENAME = 'wang' and JOB 单例索引:在数据库的单例上建立的索引. 联合索 ...

  5. mysql教程联合索引_MySQL中的联合索引学习教程

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

  6. sql优化之:数据库索引创建原则,or/in/union与索引优化,聚集索引/非聚集索引/联合索引/索引覆盖,MySQL冗余数据的三种方案,MySQL双主一致性架构优化(来源:架构师之路)

    一.一些常见的SQL实践 (1)负向条件查询不能使用索引 select * from order where status!=0 and stauts!=1 not in/not exists都不是好 ...

  7. mysql索引篇之覆盖索引、联合索引、索引下推

    覆盖索引 在之前<mysql索引初识>这篇文章中提到过,mysql的innodb引擎通过搜索树方式实现索引,索引类型分为主键索引和二级索引(非主键索引),主键索引树中,叶子结点保存着主键即 ...

  8. mysql使用联合唯一索引会影响查询效率吗_想进大厂,这些Mysql索引底层知识你是必须知道的。...

    前言 上一篇总结了Mysql的锁机制,通过读者的反映和阅读量显示,总体还是不错的,感兴趣的可以阅读一下[]. 写了那么多的Mysql文章,有读者问我是不是dba,工作真的需要掌握那么深吗.我想说的是: ...

  9. Mysql的联合查询的索引小结

    1.顺带提一下mysql的sql执行顺序: FORM: 对FROM的左边的表和右边的表计算笛卡尔积.产生虚表VT1 ON: 对虚表VT1进行ON筛选,只有那些符合<join-condition& ...

最新文章

  1. Apache htpasswd命令
  2. 还在 for 循环里使用 + 拼接字符串?明天不用来上班了!
  3. 李开复Bengio大咖对话:下一阶段AI最大机遇在这4个领域
  4. python滚动条_python中selenium操作下拉滚动条的几种方法汇总
  5. 网狐棋牌(六) DataBaseEngine 和 网狐棋牌(七) CEventService
  6. 漫步数理统计十一——连续随机变量(下)
  7. 我们都在努力做自己,我的编程之路开篇
  8. [整理]苹果审核被拒后,返回崩溃日志应该怎么分析处理
  9. 如何在VLC中添加字幕?
  10. 海量监控视频如何存储?
  11. 在四位共阴极数码上显示“2 3 5 8”四个数字
  12. [hdu3873] Invade the Mars
  13. 璞华PLM为全场景产品生命周期管理赋能,助力产品主线的企业数字化转型
  14. Linux互斥锁详细解读,看这一篇就够了
  15. Antv X6 动态连线
  16. 无人驾驶:高精地图与定位
  17. 【行业首发】蛙色VR全景作品支持对接飞猪旅行
  18. java字符串转成utf-8_将字符串的编码格式转换为utf-8
  19. linux中用c语言编写一个经纬度转换大地坐标
  20. 八荣八耻(超强暴笑豪华版)

热门文章

  1. Python之configparser模块详解和使用
  2. linux SU不用密码,linux设置su和sudo为不需要密码
  3. vscode 切换开发者工具_大整理!JavaScript开发者的27个神奇VSCode工具
  4. 克隆网站工具_4 种开源云安全工具
  5. model Ensemble
  6. ResNeXt结构(code)
  7. 朴素贝叶斯算法+模型的评价-查准率、召回率、F1-score及混淆矩阵(code实现)
  8. java json clone_再谈java clone 以及 浅/深拷贝
  9. CNN-RNN中文文本分类,基于TensorFlow 实现
  10. 昔年浅谈成都的百度推广公司靠谱吗这个问题?!