mysql选择联合索引还是单索引?索引列应该使用哪一个最有效?深入測试探讨...
先建表
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选择联合索引还是单索引?索引列应该使用哪一个最有效?深入測试探讨...相关推荐
- 索引利弊,如何创建索引,单键索引还是组合索引
** 索引的利弊与如何判定,是否需要索引** 相信读者都知道索引能够极大地提高数据检索的效率,让Query 执行得更快,但是可能并不是每一位朋友都清楚索引在极大提高检索效率的同时,也给数据库带来了一些 ...
- 使用复合索引代替单键索引,来避免单键有null值的情况
查看原表: SQL> select count(*) from t1;COUNT(*) ----------3229088SQL> select count(*) from t1 wher ...
- mysql联合索引和单索引_mysql联合索引跟单列索引的区别
为了提高数据库效率,建索引是家常便饭:那么当查询条件为2个及以上时,我们是创建多个单列索引还是创建一个联合索引好呢?他们之间的区别是什么?哪个效率高呢?我在这里详细测试分析下. 一.联合索引测试 注: ...
- mysql 联合索引 单个索引_mysql的单例索引和联合索引
--联合索引查询第一个.第二个参数(走索引) explain select* from emp where ENAME = 'wang' and JOB 单例索引:在数据库的单例上建立的索引. 联合索 ...
- mysql教程联合索引_MySQL中的联合索引学习教程
联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支持a | a,b| ...
- sql优化之:数据库索引创建原则,or/in/union与索引优化,聚集索引/非聚集索引/联合索引/索引覆盖,MySQL冗余数据的三种方案,MySQL双主一致性架构优化(来源:架构师之路)
一.一些常见的SQL实践 (1)负向条件查询不能使用索引 select * from order where status!=0 and stauts!=1 not in/not exists都不是好 ...
- mysql索引篇之覆盖索引、联合索引、索引下推
覆盖索引 在之前<mysql索引初识>这篇文章中提到过,mysql的innodb引擎通过搜索树方式实现索引,索引类型分为主键索引和二级索引(非主键索引),主键索引树中,叶子结点保存着主键即 ...
- mysql使用联合唯一索引会影响查询效率吗_想进大厂,这些Mysql索引底层知识你是必须知道的。...
前言 上一篇总结了Mysql的锁机制,通过读者的反映和阅读量显示,总体还是不错的,感兴趣的可以阅读一下[]. 写了那么多的Mysql文章,有读者问我是不是dba,工作真的需要掌握那么深吗.我想说的是: ...
- Mysql的联合查询的索引小结
1.顺带提一下mysql的sql执行顺序: FORM: 对FROM的左边的表和右边的表计算笛卡尔积.产生虚表VT1 ON: 对虚表VT1进行ON筛选,只有那些符合<join-condition& ...
最新文章
- Apache htpasswd命令
- 还在 for 循环里使用 + 拼接字符串?明天不用来上班了!
- 李开复Bengio大咖对话:下一阶段AI最大机遇在这4个领域
- python滚动条_python中selenium操作下拉滚动条的几种方法汇总
- 网狐棋牌(六) DataBaseEngine 和 网狐棋牌(七) CEventService
- 漫步数理统计十一——连续随机变量(下)
- 我们都在努力做自己,我的编程之路开篇
- [整理]苹果审核被拒后,返回崩溃日志应该怎么分析处理
- 如何在VLC中添加字幕?
- 海量监控视频如何存储?
- 在四位共阴极数码上显示“2 3 5 8”四个数字
- [hdu3873] Invade the Mars
- 璞华PLM为全场景产品生命周期管理赋能,助力产品主线的企业数字化转型
- Linux互斥锁详细解读,看这一篇就够了
- Antv X6 动态连线
- 无人驾驶:高精地图与定位
- 【行业首发】蛙色VR全景作品支持对接飞猪旅行
- java字符串转成utf-8_将字符串的编码格式转换为utf-8
- linux中用c语言编写一个经纬度转换大地坐标
- 八荣八耻(超强暴笑豪华版)
热门文章
- Python之configparser模块详解和使用
- linux SU不用密码,linux设置su和sudo为不需要密码
- vscode 切换开发者工具_大整理!JavaScript开发者的27个神奇VSCode工具
- 克隆网站工具_4 种开源云安全工具
- model Ensemble
- ResNeXt结构(code)
- 朴素贝叶斯算法+模型的评价-查准率、召回率、F1-score及混淆矩阵(code实现)
- java json clone_再谈java clone 以及 浅/深拷贝
- CNN-RNN中文文本分类,基于TensorFlow 实现
- 昔年浅谈成都的百度推广公司靠谱吗这个问题?!