建表语句:

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组合索引最左原则,复合索引最左原则 -- 实战相关推荐

  1. oracle 复合索引原则,复合索引在什么情况下使用

    http://topic.csdn.net/t/20060813/16/4946416.html 1.复合索引使用的目的是什么? :能形成索引覆盖,提高where语句的查询效率 2.一个复合索引是否可 ...

  2. mysql复合索引使用场景_mysql复合索引(联合索引)的使用场景

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

  3. 通俗的解释什么是复合索引和最左原则

    1.什么是复合索引? 顾名思义,复合索引的意识就是,将数据库中的多个字段组合起来形成的一个索引就是复合索引.创建复合索引的方式如下图所示: (1)使用Navicat创建 (2)使用SQL语句创建 UN ...

  4. oracle复合索引介绍(多字段索引)

    首先,在大多数情况下,复合索引比单字段索引好.以税务系统的SB_ZSXX(申报类_征收信息表)为例,该表为税务系统最大的交易表.如果分别按纳税人识别号,税务机关代码,月份3个字段查询,每个字段在该表中 ...

  5. Mysql复合索引最左匹配原则以及索引失效条件

    Mysql复合索引最左匹配原则以及索引失效条件 复合索引最左匹配原则 用EXPLAIN 来查看语句是否用到了索引 索引失效的条件 一般性建议 复合索引最左匹配原则 复合索引又叫联合索引.两个或更多个列 ...

  6. 索引和未索引执行计划的比较_详解Oracle复合索引+实例说明

    复合索引 复合索引顾名思义,区别于单列索引,是由两个或多个列一起构成的索引.其在B树上的数据结构是什么样?如下图,是一个包含两列的复合索引. 如果你观察仔细,还会发现它的叶子节点是ASC递增排序的.现 ...

  7. oracle 复合索引

    转自https://www.csdn.net/gather_29/MtTaQg0sOTIyMC1ibG9n.html oracle通过复合索引优化查询及不走索引的8种情况 :https://www.c ...

  8. oracle查询两列合并成一列_MySQL复合索引和单列索引的单表查询分析

    本文由读者小平同志投稿,小平是一位非常朴实认真的猿,现于某上市证券公司做微服务开发,对 MySQL 优化有深入研究,小平的博客地址是https://blog.csdn.net/weixin_41193 ...

  9. mysql复合索引与普通索引总结

     正则匹配url Kohana框架as_array转换json数据 mysql复合索引.普通索引总结 2013-11-18 14:03:13|  分类: mysql |  标签: |举报 |字号大 ...

最新文章

  1. C#解析XML各种方法特点比较(转载)
  2. 《疯狂Java讲义》8
  3. 蓝桥杯 试题 入门训练 序列求和——6行代码AC
  4. SpringBoot使用velocity模板引擎
  5. 201621123080《Java程序设计》第十一周学习总结
  6. 【51单片机快速入门指南】4.4.3:Madgwick AHRS 九轴姿态融合获取四元数、欧拉角
  7. 04 | 复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度
  8. NPM和Yarn添加淘宝镜像
  9. java session使用_Java互联网架构-高负载集群架构如何解决session一致性问题
  10. pytest-xdist分布式执行测试用例
  11. python中文字体下载_python中matlabplot和seaborn中文字体显示的一种解决方案
  12. Jquery 提交 乱码的问题
  13. zz机器学习与人工智能学习资源导引
  14. angularJS与IE8整合简介
  15. Unity之UnityWebRequest和使用
  16. 小盒马,大永辉,“大润发们”的未来怎么“大发”?
  17. java基础 day14数据安全,银行账户取款例子,synchronized()使用、面试题,死锁,线程安全
  18. 镜子法则--看得人泪流满面!
  19. 主动降噪耳机哪个牌子性价比最高?千元内主动降噪耳机推荐
  20. java实现hbase表创建、数据插入、删除表

热门文章

  1. C++ 作用域使用规范建议
  2. db2存储过程简单写法
  3. 跟着开涛springmvc学习(转)
  4. 实验2 格式化输入输出和分支语句
  5. redis cluster 集群拓展
  6. android 应用使用Root权限执行linux命令
  7. (转)PHP生成图片缩略图
  8. Android 相关翻译
  9. 美国大学计算机学科分类
  10. iOS 实现简单的列表预加载