Mysql group by实现方式(一) - 索引扫描

由于GROUP BY实际上也同样须要进行排序操作,而且与ORDER BY相比,GROUP BY主要只是多了排序之后的分组操作。所以,在GROUP BY的实现过程中,与ORDER BY一样可以利用索引

例如有一个索引idx(c1,c2,c3)

SELECT c1, c2 FROM t1 WHERE c1 < 10 GROUP BY c1, c2;

这条查询就可以直接使用索引扫描完成

使用索引扫描需要什么条件?

(1)查询针对一个单表

(2)GROUP BY条件字段必须处在同一个索引中最前面的连续位置

(3)如果引用到了该索引中GROUP BY条件之外的字段条件,它就必须以常量形式存在

(4)在使用GROUP BY 的同时,如果有聚合函数,只能使用 MAX 和 MIN 这两个聚合函数,并且它们均指向相同的列

(5)当 GROUP BY 条件字段不是索引前缀部分的时候,where 中的条件字段需包含缺失的索引键,且是一个常量

例如 SELECT c1, c2 FROM t1 WHERE c2 = 10 GROUP BY c1, c3;

此GROUP BY使用c1, c3,缺失c2,不符合最左前缀原则,但where条件中有c2,并且条件值是个常量,所以就满足条件,可以使用索引完成group by操作了

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2015-07-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java 源码分析

数据库Exists关键字举例

一.问题描述: 查询所有未选择03号课程的学生的姓名 规定使用存在量词 student表: ? grade表: ? 二.思路: 既然是存在量词那么也就是E...

30660
来自专栏C# 编程

2 - SQL Server 2008 之 使用SQL语句为现有表添加约束条件

上一节讲的是直接在创建表的时候添加条件约束,但是有时候是在表格创建完毕之后,再添加条件约束的,那么这个又该如何实现? 其实,跟上一节所写的SQL代码,很多是相同...

22700
来自专栏C# 编程

1 - SQL Server 2008 之 使用SQL语句创建具有约束条件的表

约束条件分为以下几种: 1)非空约束,使用NOT NULL关键字; 2)默认值约束,使用DEFAULT关键字; 3)检查约束,使用CHECK关键字; 4)唯一约...

21000
来自专栏机器学习算法与Python学习

SQL Server 学习笔记

之前学过一点数据库但由于一直没有使用忘得差不多了,最近重新复习一下相关的知识,把基本的语法YOU又看了一遍,为了强化记忆在写一遍~~~~~~ ? 基本的 se...

384150
来自专栏Java帮帮-微信公众号-技术文章全总结

【数据库】MySQL进阶五、带or多条件查询

【数据库】MySQL进阶五、or多条件查询 MySQL数据表中带OR的多条件查询 OR关键字可以联合多个条件进行查询。使用OR关键字时: 条件 1) 只要符合这...

62070
来自专栏我的博客

Mysql各自段类型取值范围

各种字段类型的取值范围。 TINYINT -128 – 127 TINYINT UNSIGNED 0 – 255 SMALLINT -32768 –...

32070
来自专栏IT开发技术与工作效率

MySQL 循环查询树 函数

24250
来自专栏抠抠空间

MySQL之单表查询

一、单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY fiel...

32470
来自专栏运维技术迷

MySQL数据库(八):表记录的基本操作(增删改查)

一、增 insert:增加(条件一条新纪录,默认新添加的记录都添加在已有记录的末尾) 1.格式: 1.1添加新纪录时,只给记录中的某几个字段赋值 inser...

709110
来自专栏钟绍威的专栏

当子查询碰上NULLUNIONJOIN总结

情景: 现在有如图两个表,boy和girl,对应着Boy和Girl两个bean,有共同字段id、name,另外boy还有个外键grilfriend(指向girl...

18770

扫码关注云+社区

领取腾讯云代金券