oracle组合索引最左原则,复合索引最左原则 -- 实战
建表语句:
CREATE TABLE `t_user` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`bu_id` INT(20) NOT NULL,
`name` VARCHAR(255) NOT NULL,
`age` INT(11) NOT NULL,
`sex` VARCHAR(255) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `index_uid_name_age` (`bu_id`, `name`, `age`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=22014
;
批量插入数据:
CREATE PROCEDURE batch_insert()
BEGIN
DECLARE a INT DEFAULT 1;
WHILE (a <= 10000) DO
SET a = a + 1;
insert into t_user set name='name2', age=a, bu_id=a+5;
END WHILE;
COMMIT;
END;
CALL batch_insert();
**Explain SQL: **
Explain SQL:
1)explain select bu_id,name,age,sex from t_user where bu_id=17
结果:idselect_type tabletypepossible_keyskeykey_len refrows
1SIMPLE t_userrefindex_buid_name_ageindex_buid_name_age4 const10853
结论:使用了index_buid_name_age索引,并且只使用了复合索引中的bu_id列。
2)explain select bu_id,name,age,sex from t_user where name='jack'
结果:idselect_type tabletypepossible_keyskey key_len refrowsExtra
1SIMPLE t_userALL21706Using where
结论:没有使用索引,进行了全表扫描。
3)explain select bu_id,name,age,sex from t_user where bu_id=17 and name='jack'
结果:idselect_type tabletypepossible_keyskey key_len refrowsExtra
1SIMPLE t_userrefindex_buid_name_ageindex_buid_name_age771 const,const1Using index condition
结论:使用了index_buid_name_age索引,并且(根据key_len可以推断出)使用了该复合索引中的bu_id列和name列。
4)explain select bu_id,name,age,sex from t_user where bu_id=17 and name='jack' and age=18
结果:idselect_type tabletypepossible_keyskey key_len refrowsExtra
1SIMPLE t_userrefindex_buid_name_ageindex_buid_name_age775 const,const,const1Using index condition
结论:使用了index_buid_name_age索引,并且(根据key_len可以推断出)使用了该复合索引中的bu_id列、name列和age列。
5)explain select bu_id,name,age,sex from t_user where bu_id=17 and name like '%jack'
结果:idselect_type tabletypepossible_keyskey key_len refrowsExtra
1SIMPLE t_userrefindex_buid_name_ageindex_buid_name_age4 const10853Using index condition
结论:使用了index_buid_name_age索引,但是只使用了该复合索引中的bu_id列。
6)explain select bu_id,name,age,sex from t_user where bu_id=17 and name like 'jack%'
结果:idselect_type tabletypepossible_keyskey key_len refrowsExtra
1SIMPLE t_userrangeindex_buid_name_ageindex_buid_name_age7711Using index condition
结论:使用了index_buid_name_age索引,并且(根据key_len可以推断出)使用了该复合索引中的bu_id列和name列。
7)explain select bu_id,name,age,sex from t_user where bu_id=17 and age=18
结果:idselect_type tabletypepossible_keyskey key_len refrowsExtra
1SIMPLE t_userrefindex_buid_name_ageindex_buid_name_age4 const10852Using index condition
结论:使用了index_buid_name_age索引,但是只使用了该复合索引中的bu_id列。
8)explain select name from t_user where name='jack' 或explain select bu_id,name,age from t_user where name='jack'
结果:idselect_type tabletypepossible_keyskey key_len refrowsExtra
1SIMPLE t_userindexindex_buid_name_age77521705Using where; Using index
结论:使用了index_buid_name_age索引,并且(根据key_len可以推断出)使用了该复合索引中的bu_id列、name列和age列。
注意:比较一下第2个sql语句和第8个sql语句,二者的区别在于:
1>第2个sql语句查询了非索引列sex,故根据最左原则,无法使用该索引;
2>第8个sql语句只查询了索引列,(若只查询索引列,则只需扫描索引树即可)故可以使用该索引。
oracle组合索引最左原则,复合索引最左原则 -- 实战相关推荐
- oracle 复合索引原则,复合索引在什么情况下使用
http://topic.csdn.net/t/20060813/16/4946416.html 1.复合索引使用的目的是什么? :能形成索引覆盖,提高where语句的查询效率 2.一个复合索引是否可 ...
- mysql复合索引使用场景_mysql复合索引(联合索引)的使用场景
什么是联合索引? 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支 ...
- 通俗的解释什么是复合索引和最左原则
1.什么是复合索引? 顾名思义,复合索引的意识就是,将数据库中的多个字段组合起来形成的一个索引就是复合索引.创建复合索引的方式如下图所示: (1)使用Navicat创建 (2)使用SQL语句创建 UN ...
- oracle复合索引介绍(多字段索引)
首先,在大多数情况下,复合索引比单字段索引好.以税务系统的SB_ZSXX(申报类_征收信息表)为例,该表为税务系统最大的交易表.如果分别按纳税人识别号,税务机关代码,月份3个字段查询,每个字段在该表中 ...
- Mysql复合索引最左匹配原则以及索引失效条件
Mysql复合索引最左匹配原则以及索引失效条件 复合索引最左匹配原则 用EXPLAIN 来查看语句是否用到了索引 索引失效的条件 一般性建议 复合索引最左匹配原则 复合索引又叫联合索引.两个或更多个列 ...
- 索引和未索引执行计划的比较_详解Oracle复合索引+实例说明
复合索引 复合索引顾名思义,区别于单列索引,是由两个或多个列一起构成的索引.其在B树上的数据结构是什么样?如下图,是一个包含两列的复合索引. 如果你观察仔细,还会发现它的叶子节点是ASC递增排序的.现 ...
- oracle 复合索引
转自https://www.csdn.net/gather_29/MtTaQg0sOTIyMC1ibG9n.html oracle通过复合索引优化查询及不走索引的8种情况 :https://www.c ...
- oracle查询两列合并成一列_MySQL复合索引和单列索引的单表查询分析
本文由读者小平同志投稿,小平是一位非常朴实认真的猿,现于某上市证券公司做微服务开发,对 MySQL 优化有深入研究,小平的博客地址是https://blog.csdn.net/weixin_41193 ...
- mysql复合索引与普通索引总结
正则匹配url Kohana框架as_array转换json数据 mysql复合索引.普通索引总结 2013-11-18 14:03:13| 分类: mysql | 标签: |举报 |字号大 ...
最新文章
- C#解析XML各种方法特点比较(转载)
- 《疯狂Java讲义》8
- 蓝桥杯 试题 入门训练 序列求和——6行代码AC
- SpringBoot使用velocity模板引擎
- 201621123080《Java程序设计》第十一周学习总结
- 【51单片机快速入门指南】4.4.3:Madgwick AHRS 九轴姿态融合获取四元数、欧拉角
- 04 | 复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度
- NPM和Yarn添加淘宝镜像
- java session使用_Java互联网架构-高负载集群架构如何解决session一致性问题
- pytest-xdist分布式执行测试用例
- python中文字体下载_python中matlabplot和seaborn中文字体显示的一种解决方案
- Jquery 提交 乱码的问题
- zz机器学习与人工智能学习资源导引
- angularJS与IE8整合简介
- Unity之UnityWebRequest和使用
- 小盒马,大永辉,“大润发们”的未来怎么“大发”?
- java基础 day14数据安全,银行账户取款例子,synchronized()使用、面试题,死锁,线程安全
- 镜子法则--看得人泪流满面!
- 主动降噪耳机哪个牌子性价比最高?千元内主动降噪耳机推荐
- java实现hbase表创建、数据插入、删除表