mysql之联合索引测试:

前期准备:

建立联合索引?

CREATE TABLE `test` (

`id` bigint(16) NOT NULL AUTO_INCREMENT,

`aaa` varchar(16) NOT NULL,

`bbb` varchar(16) NOT NULL,

`ccc` int(11) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

如果表已经建好了,那么修改表:

create index `sindex` on `test` (`aaa`,`bbb`,`ccc`);

这种方式报错

alert table test add INDEX `sindex` (`aaa`,`bbb`,`ccc`)

修改表的存储引擎:

ALTER TABLE tablename ENGINE = MyISAM;

ALTER TABLE tablename ENGINE = INNODB;

Explain:

其中最重要的字段为:id、type、key、rows、Extra

id:

1、id相同:执行顺序由上至下

2、id不同:如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行

3、id相同又不同(两种情况同时存在):id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行

type:

访问类型,sql查询优化中一个很重要的指标,结果值从好到坏依次是:

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

key:

查询中如果使用了覆盖索引,则该索引仅出现在key列表中

rows:

根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数

Extra:

1、Using filesort :

mysql对数据使用一个外部的索引排序,而不是按照表内的索引进行排序读取。也就是说mysql无法利用索引完成的排序操作成为“文件排序”

2、Using temporary:

使用临时表保存中间结果,也就是说mysql在对查询结果排序时使用了临时表,常见于order by 和 group by

3、Using index:

表示相应的select操作中使用了覆盖索引(Covering Index),避免了访问表的数据行,效率高

如果同时出现Using where,表明索引被用来执行索引键值的查找(参考上图)

如果没用同时出现Using where,表明索引用来读取数据而非执行查找动作

覆盖索引(Covering Index):也叫索引覆盖。就是select列表中的字段,只用从索引中就能获取,不必根据索引再次读取数据文件,换句话说查询列要被所建的索引覆盖。

Explain:

下方的控制台主要关注两个栏,type和extra

当extra出现道Using filesort和Using temproary这两个时,表示无法使用索引版,必须尽快做优化。

当type出现all时,表示走的是全表扫描没有走索引,效率低下,这时需要对sql进行调优。

当type出现ref或者index时,表示走的是索引,index是标准不重复的索引,ref表示虽然使用了索引,但是索引列中有重复的值,但是就算有权重复值,也只是在重复值的

范围内小范围扫描,不造成重大的性能影响。

测试语句是否使用了索引:

网上说联合索引 test_col1_col2_col3 实际建立了(col1)、(col1,col2)、(col,col2,col3)三个索引。但是

我蒙蔽了,在我实际的测试中,aaa bbb ccc 这三个条件不管删除那个,怎么组合where条件查询 type:index extral:Using where; Using index 难道说都用到索引了嘛?

sql1:explain select * from test where aaa=1 and bbb=1;

用到了索引

sql2:explain select * from test where bbb=1 and aaa=1;

联合索引设置

aaa bbb

bbb aaa

bbb

mysql建立联合索引_mysql之联合索引相关推荐

  1. mysql 查询优化 非索引_mysql 查询优化和索引使用心得

    -- sql优化案例 -- 1.not in 用left join on 替换 -- 2.like '%XXX%' 用 like 'XXX%' 替换 -- 3.limit 优化 实用,在分页中 EXP ...

  2. MySQL第九章索引_MySQL高级(索引优化+慢查询定位)

    一.先谈谈事务 1. ACID特性 1.1 原子性: 事务是最小的执行单位,不允许分割.事务的原子性确保动作要么全部完成,要么完全不起作用: 1.2 一致性: 执行事务前后,数据库从一个一致性状态转换 ...

  3. mysql如何创建简单索引_mysql 如何创建索引呢,这个其实很简单

    mysql 如何创建索引? mysql 如何创建索引呢,这个其实很简单 create index或者为己有字段增加索引 ALTER TABLE `table_name` ADD UNIQUE (`co ...

  4. mysql btree检索策略_MySQL之Btree索引和HASH索引的区别以及索引优化策略

    索引是帮助mysql获取数据的数据结构.最常见的索引是Btree索引和Hash索引. 不同的引擎对于索引有不同的支持:Innodb和MyISAM默认的索引是Btree索引:而Mermory默认的索引是 ...

  5. mysql 隐藏中间四位_MySQL知识体系——索引

    本文直切主题,针对InnoDB引擎描述索引及优化策略.在开始之前,需要读者了解: 二叉查找树(包括2-3查找树.红黑树等数据结构) MySQL的InnoDB引擎基础知识 索引初探 要了解索引,当然要了 ...

  6. mysql优化和索引_mysql优化和索引

    表的优化 1.定长与变长分离 如 int,char(4),time核心且常用字段,建成定长,放在一张表: 而varchar,text,blob这种变长字段适合单放一张表,用主键与核心表关联. 2.常用 ...

  7. mysql 制定索引_mysql的最佳索引攻略

    > 本设计和优化专题转自博客园的[Mysql的设计和优化专题](http://www.cnblogs.com/nixi8/) ## Explain优化查询检测 所谓索引就是为特定的mysql字段 ...

  8. mysql查询中怎样使用索引_MySQL如何使用索引

    初始化测试数据 创建一个测试用的表 create tabledept( idint primary keyauto_increment , deptNamevarchar(32) not null u ...

  9. mysql 回表 覆盖索引_mysql 14 覆盖索引+回表

    举个栗子,假如有一张表:tableA t(id PK, name KEY, sex, flag);  即id是聚集索引,name是普通索引. 分别执行2条SQL SQL1 :   select id, ...

最新文章

  1. everything文件搜索_本地文件搜索神器,Everything、Listary、AnyTXT Searcher!
  2. Failed to resolve:com.android.support:appcompat-v7
  3. CentOS通过日志反查入侵
  4. Git push file exceed GitHub's file size
  5. squid ldap认证(AD)
  6. idea配置的导入导出
  7. Go语言并发爬虫,爬取空姐网所有相册图片
  8. mysql中对象标识符的命名规则,标准规范数据库命名规范.doc
  9. 诡异奇怪的“虚拟硬盘可用空间不足”告警
  10. web-----简单小游戏项目
  11. 前端图片压缩(几乎无损)
  12. 中国远程医疗行业发展前景预测和投资规划分析报告2022-2027年
  13. 微型计算机内存一般为多少,微型计算机内存容量的基本计量单位
  14. RedHat 自定义Jenkins Slaver Service,并开机自启动
  15. 判断闰年和平年的程序
  16. 工作杂谈之说说工作中的二宗罪
  17. B站Django项目天天生鲜学习|celery异步发送邮件遇到的问题
  18. 体育教学与计算机技术的结合点,浅析计算机技术在高校体育教学中的应用
  19. 排查定时任务为什么不执行
  20. 对C语言的关键字及部分关键字用法的简单理解

热门文章

  1. golang roadrunner中文文档(一)基础介绍
  2. C语言中阶第四篇:分支与循环语句练习,求阶乘的多种方法(两层for循环求阶乘)、二分查找、字符串汇聚以及模拟用户登录
  3. unity3d计算机配置要求,用unity3d开发游戏电脑配置要求是什么?
  4. WPS 智能办公体验官公测-附申请链接
  5. jquery.slimscroll.min.js轮动条插件
  6. redis的zset的底层实现_深入理解Redis Zset原理
  7. 流程管理精益--价值流程图讲解及构造(一)
  8. mac 下载、安装、配置mysql详细教程
  9. Binary XML file line : Error inflating class 错误分析
  10. 独立产品灵感周刊 DecoHack #030 - iOS16正式发布