explain SELECT a, b, COUNT(*) FROM tbname

GROUP BY a, b

order by a DESC

limit 1

a 和 b 列已经设置联合索引, 为什么这种操作也会执行全表扫描呢?explain SELECT a, b FROM tbname

GROUP BY a, b

order by a DESC

去掉 COUNT 和 limit 则走索引没有扫描, 这是为什么呢?

这种场景有什么优化思路呢?

表结构CREATE TABLE `tbname` (

`id` INT(11) NOT NULL AUTO_INCREMENT,

`a` INT(11) NULL DEFAULT '0',

`b` INT(11) NULL DEFAULT '0',

PRIMARY KEY (`id`),

INDEX `testkey` (`a`, `b`)

)

COLLATE='utf8_general_ci'

ENGINE=InnoDB;

INSERT INTO `tbname` (`a`, `b`) VALUES ('1', '1');

INSERT INTO `tbname` (`a`, `b`) VALUES ('1', '1');

INSERT INTO `tbname` (`a`, `b`) VALUES ('1', '1');

INSERT INTO `tbname` (`a`, `b`) VALUES ('1', '1');

INSERT INTO `tbname` (`a`, `b`) VALUES ('1', '1');

查询1:explain SELECT a, b, COUNT(*) FROM tbname

GROUP BY a, b

order by a DESC

limit 1

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |

| ---: | --- | --- | --- | --- | --- | --- | --- | --- | ---: | ---: | --- |

| 1 | SIMPLE | tbname | \N | index | testkey | testkey | 10 | \N | 5 | 100.00 | Using index; Using temporary; Using filesort |

查询2:explain SELECT a, b FROM tbname

GROUP BY a, b

order by a DESC

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |

| ---: | --- | --- | --- | --- | --- | --- | --- | --- | ---: | ---: | --- |

| 1 | SIMPLE | tbname | \N | range | testkey | testkey | 10 | \N | 1 | 100.00 | Using index for group-by; Using temporary; Using filesort |

MySQL不走联合索引_mysql group by 多列优化思路?为什么不走联合索引?相关推荐

  1. mysql group by 天_MySQL group by语句如何优化

    在MySQL中,新建立一张表,该表有三个字段,分别是id,a,b,插入1000条每个字段都相等的记录,如下: mysql> show create table t1G ************* ...

  2. mysql is null走索引_mysql中IS NULL、IS NOT NULL不能走索引?

    不知道是啥原因也不知道啥时候, 江湖上流传着这么一个说法 mysql查询条件包含IS NULL.IS NOT NULL.!=.like %* .like %*%,不能使用索引查询,只能使用全表扫描. ...

  3. mysql 主从 索引_Mysql繁忙主从库在线修改表结构与添加索引问题

    本帖最后由 jan_1985 于 2014-1-15 13:28 编辑 Mysql繁忙主从库在线修改表结构与添加索引问题 一直以来,生产情况下都有修改索引和修改字段的需求,但是对锁表引起的访问不便是会 ...

  4. mysql计算三角形斜边_MySQL 5.7新特性之Generated Column(函数索引)

    MySQL 5.7引入了Generated Column,这篇文章简单地介绍了Generated Column的使用方法和注意事项,为读者了解MySQL 5.7提供一个快速的.完整的教程.这篇文章围绕 ...

  5. mysql的order by,group by和distinct优化

    order by,group by和distinct三类操作是在MySQL中经常使用的,而且都涉及到排序,所以就把这三种操作放在一起介绍. order by的实现与优化 order by的实现有两种方 ...

  6. mysql 字段加减_MySQL数据库开发常见问题及优化(续)

    在设计表或索引时,常出现以下几个问题: 1.少建索引或不建索引.这个问题最突出,建议建表时 DBA 可以一起协助把关. 2.索引滥用.滥用索引将导致写请求变慢,拖慢整体数据库的响应速度(5.5 以下的 ...

  7. ElasticSearch探索之路(四)索引原理:倒排索引、列式存储、Fielddata、索引压缩、联合索引

    文章目录 倒排索引 Term dictionary与Term index 列式存储--Doc Values Fielddata 索引压缩 FOR编码 Roaring Bitmaps 联合索引 倒排索引 ...

  8. mysql schema数据混乱_MySQL之Schema与数据类型优化

    选择优化的数据类型 MySQL支持的数据类型非常多,选择正确的数据类型对于获得高性能至关重要.不管存储哪种类型的数据,下面几个简单的原则都有助于做出更好的选择: 更小的通常更好 一般情况下,应该尽量使 ...

  9. 修改mysql 视图字段类型_MySQL中的数据类型,列选项,视图

    列的数据类型 整型 类型 取值范围 tinyint -128 - 127 smallint -32768 - 32767(几万) mediumint -8388608 - 8388607(几百万) i ...

最新文章

  1. Android报错:java.lang.IllegalArgumentException: Surface was abandoned
  2. 编译-C++支持iOS静态库的脚本学习
  3. springboot入门_打包部署
  4. c++ socket启动网卡接口
  5. 检索图书 FindMess.java
  6. java链表代码,java链表的基本使用 代码
  7. rest web服务_在WildFly的REST Web服务中与Jackson的双向关系
  8. iwrite提交不了作业_iWrite英语写作教学与评阅系统移动端——学生使用手册
  9. 用jQuery监听浏览器窗口的变化
  10. servlet源码查看
  11. 本周Asp.net源码更新(6.25-6.29)
  12. jquery砸金蛋 高仿阿里旅游砸金蛋
  13. 超详细汇总21个mysql优化实践【收藏版MySQL优化】
  14. 新版FMEA软件:特殊特性自动分类 免费申请试用(FMEAHunter)
  15. 杨辉三角形JAVA代码
  16. 四维图新地图坐标_移动端地图技术分享
  17. 如何查询硬盘序列号,百度的答案全是错的
  18. 详解嵌入式系统知识和接口技术总结
  19. Labview温度采集系统
  20. java服务端集成腾讯IM 腾讯云通讯生成usersig的方法

热门文章

  1. JavaScript从入门到放弃 - ES6中的对象和类
  2. docker无法连接mysql镜像_关于Docker官方CentOS镜像无法启动mysqld的总结
  3. python工作目录_Python目录的基本操作
  4. MATLAB灰度级数为1,图像处理 – 在matlab中更改灰度图像中的灰度级数
  5. python局部变量含义_Python的变量
  6. mysql_unbuffered_query pdo_php中mysql操作的buffer知识
  7. BugkuCTF-MISC题三色绘恋
  8. java不要无限循环_java – 看似无限循环终止,除非使用System.out.println
  9. bellman ford java_Java C 实现Bellman-ford算法
  10. ctf mysql hash传递_分享个 CTF 小工具 bruteHASH