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. 什么是数据湖(Data Lake)?
  2. LeetCode Find All Duplicates in an Array
  3. 一个功能函数所具备的要素
  4. 【指标统计】删除抖动遥信
  5. C#程序员经常用到的10个实用代码片段
  6. 94. Binary Tree Inorder Traversal 二叉树的中序遍历
  7. xfce4终端的字体颜色修改
  8. Android之华为平板打日志提示Permission denied
  9. C# IIS ManagementException: 访问遭到拒绝
  10. leetcode笔记:Majority Element
  11. 编码表/转义字符/进制转换
  12. 转账设计测试用例-----必背
  13. 如何搭建自己CDN服务器
  14. GEE学习:按照行列号筛选鄱阳湖湖区影像数据并查询相关信息
  15. STM32之串口的使用
  16. 智能车那些事 4 常用电子元件之电容
  17. 物联网技术(基本概述说明)
  18. 色散共焦传感器如何进行同步信号输出?
  19. 对宽带帐号安全威胁分析以及防范的方法
  20. C++标准程序库STL

热门文章

  1. java写入文件的几种方法(一)
  2. 居家好物┃超好用的擦窗神器保护腰椎尾椎久坐不累的美臀坐垫
  3. PADS技巧--差分线画法
  4. 【Flink】FlinkSQL代码格式问题
  5. 小程序引入ttf字体文件
  6. 数据集成到可视化分析,轻松驾驭数据洞察力:ETLCloud与帆软BI完美结合
  7. 怎么把英语音频转换成文字?这些方法你应该要试一下
  8. uC/OS-II编译环境搭建方法
  9. Android之短信备份
  10. Android 启动引导图的实现