mysql建立联合索引_mysql之联合索引

mysql建立联合索引_mysql之联合索引mysql之联合索引测试:前期准备:建立联合索引?CREATETABLE`test`(`id`bigint(16)NOTNULLAUTO_INCREMENT,`aaa`varchar(16)NOTNULL,`bbb`varchar(16)NOTNULL,`ccc`int(11)NOTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBDEF…

大家好,又见面了,我是你们的朋友全栈君。

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136251.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 俞敏洪沉默,新东方落泪

    俞敏洪沉默,新东方落泪据传,早些年以新东方三位创始人创业为主线故事,风靡一时的电影《中国合伙人》开拍前,剧组曾向电影男主角的原型人物俞敏洪,提出了友好交流的请求。俞敏洪提出最大的意见是:可不可以别把我拍得这么“土鳖”?几十年来,号称农村出身的寒门子弟俞敏洪,其身份发生了重大变化。在公开场合里,他对自己的身世表露出深深的自卑。另一方面,他又被誉为中国留学教父,俨然成为一个农村“凤凰男”逆袭成精英阶级的典型代表。当然,俞敏洪还是新东方的创始人,中国商业洪流里响当当的传奇。“我吃一碗兰州拉面都很开心”。可就是这样一个人,对财

    2025年11月7日
    5
  • java nextline next_java中的nextLine函数

    java nextline next_java中的nextLine函数今天在学习java异常处理的时候,下面这段程序中的nextLine()的用法怎么也看不明白。初学者看到这段代码会误以为程序中的input.nextLine()这句是多余的。其实,不使用这句的话,如果输入不是整数,程序会陷入死循环。当你不加input.nextLine()时,你输入小数,try块中给input.nextInt()就无法执行,因为小数无法被读取,我猜是小数一直留在键盘缓冲区。这时con…

    2022年5月6日
    62
  • 通过案例对SparkStreaming 透彻理解三板斧之二:解密SparkStreaming运行机制

    通过案例对SparkStreaming 透彻理解三板斧之二:解密SparkStreaming运行机制

    2021年9月14日
    48
  • VMware安装centos7(电动卷闸门安装方法及步骤)

    原文:https://www.jianshu.com/p/ce08cdbc4ddb?utm_source=tuicool&utm_medium=referral本篇文章主要介绍了VMware安装Centos7超详细过程(图文),具有一定的参考价值,感兴趣的小伙伴们可以参考一下1.软硬件准备软件:推荐使用VMwear,我用的是VMwear12镜像:CentOS7,如…

    2022年4月12日
    46
  • Apache kylin 入门

    Apache kylin 入门

    2021年11月27日
    45
  • 计算机职称考试科目及内容,职称计算机考试科目

    计算机职称考试科目及内容,职称计算机考试科目全国职称计算机考试主要是测试参考人员在计算机与网络方面的基本应用能力,考试科目采取模块化设计,每一科目单独考试。1.中文WindowsXP操作系统  2.中文Windows98操作系统;  3.Word97中文字处理;  4.Word2003中文字处理  5.Excel97中文电子表格;  6.Excel2003中文电子表格  7.PowerPoint97中文演示文稿…

    2022年5月22日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号