mysql中group by实现方式有三种,松散索引,紧凑索引,临时文件(文件排序)。

在网上看了相关的介绍,大部分介绍都比较晦涩难懂,这里说下我的理解。

在学习SQL优化时,我们都知道可以对group by进行优化的方式就是对group by引用的字段建立索引。当group by引用多个字段时,我们建立的相应的索引也应包含多个字段。

对group by操作优化的原理就是让mysql利用索引,而避免进行建立临时表,进而进行文件排序(group by的第三种实现方式)。

对于group by引用的多个字段,需满足于所建立索引的最左前缀索引,否则进行group by操作时,无法利用索引。在利用索引时,group by可根据索引,即可对数据分组,此时完全不用去

访问表的数据值(索引健对应的数据)。这种实现方式就是利用松散索引。

当group by引用的字段无法构成所建索引的最左前缀索引时,也就是说group by不能利用索引时。如何where语句(如果有的话)弥补了这种差距,比如:group by

引用的字段为(c2,c3),而索引为(c1,c2,c3)。此时如果where语句限定了c1=a(某一个值),那么此时mysql的执行过程为先根据where语句进行一次选择,

对选出来的结果集,可以利用索引。这种方式,从整体上来说,group by并没有利用索引,但是从过程来说,在选出的结果中利用了索引,这种方式就是紧凑索引。

这种方式,mysql的执行计划为using where,use index。而松散索引的执行计划为using index for group by。

如果mysql如论如何都不能利用索引时,此时mysql将读取所有的数据建立临时表,对文件进行排序,完成分组操作。

关于group的作用:

满足于我们针对某些字段进行分组,然后在组内对多行数据进行处理(计算行数,计算max,min等等)这样的需求。group by返回的数据是有序的。

如果我们对数据进行分组后,要输出(select)其所有(多)行的数据,此时是无法实现的。根据版本的不同,可能会输出第一行数据,可能会保错。

mysql group by作用_group by实现原理及其作用相关推荐

  1. java逻辑层的作用_java三层架构原理与作用小结

    三层架构 三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI).业务逻辑层(BLL).数据访问层(DAL).区分层次的目的即为了"高 ...

  2. MySQL登录验证码原理_三:验证码的原理、作用及实现

    验证码的原理.作用及实现 一.前言 最近学习实现了验证码,首先附图效果如下:( 简单说明: 分别提交正确.错误的验证码及对应效果 本文是图文结合说明) 二.验证码的作用 验证码是目前大多网站所支持并使 ...

  3. MySQL Group Replication调研剖析

    以下转自 http://www.iteye.com/news/32090 MySQL Group Replication调研剖析 引用 作者简介:王伟,京东基础平台数据库工程师,京东商城基础平台部门包 ...

  4. 从源码分析 MySQL Group Replication 的流控机制

    Group Replication 是一种 Shared-Nothing 的架构,每个节点都会保留一份数据. 虽然支持多点写入,但实际上系统的吞吐量是由处理能力最弱的那个节点决定的. 如果各个节点的处 ...

  5. 细细探究MySQL Group Replicaiton — 配置维护故障处理全集

    http://www.cnblogs.com/xinysu/p/6674832.html 阅读目录(Content) 1 What's Group Replication 2 配置要求与限制 2.1 ...

  6. mysql explain详解_数据库mysql(1)——B+TREE索引原理

    一.B+Tree索引详解 1.什么是索引? 索引:加速查询的数据结构. 2.索引常见数据结构: #1.顺序查找: 最基本的查询算法-复杂度O(n),大数据量此算法效率糟糕. #2.二叉树查找(bina ...

  7. MySQL索引背后的数据结构及算法原理--转

    MySQL索引背后的数据结构及算法原理 作者 张洋 | 发布于 2011-10-18 MySQL 索引 B树 优化 原文地址:http://blog.codinglabs.org/articles/t ...

  8. MySQL Group Replication 介绍

    2016-12-12,一个重要的日子,mysql5.7.17 GA版发布,正式推出Group Replication(组复制) 插件,通过这个插件增强了MySQL原有的高可用方案(原有的Replica ...

  9. Mysql group by 排序问题

    Mysql group by 排序问题 类如 有一个 帖子的回复表,posts( id , tid , subject , message , dateline ) , id 为 自动增长字段, ti ...

  10. MySQL 索引背后的数据结构及算法原理

    本文转载自http://blog.jobbole.com/24006/ 摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储 ...

最新文章

  1. 两度延期,K项目终于要开工了!
  2. notepad++ java编码,输出中文字符时,编译出错
  3. 三角测距激光重建算子HALCON
  4. 云原生思想 — 云原生的微服务架构
  5. Springsecurity之AuthenticationProvider
  6. Faster RCNN杂谈
  7. android真机调试步骤
  8. win10硬盘速度测试软件,最好的硬盘检测工具
  9. 测试用例之场景法设计
  10. BZOJ 3689: 异或之 可持久化trie+堆
  11. WUSTOJ 1275: 男神的逆袭(Java)
  12. 如何打造超大规模的智慧交通仿真环境?核心精华都在这里 | 51TECH
  13. Cesium更换地球背景
  14. 傲游浏览器 页面广告过滤 自定义 过滤规则 及使用方法 不定时更新
  15. 在c语言中 auto的作用,c语言中auto是什么意思
  16. 4.Python数据结构及算法----无序和有序列表:链表
  17. 计算机专业对口招生大学四川,2020年四川对口招生本科院校达13所,录取总计划近3000人...
  18. 国通总结——如何获取客户的双录视频
  19. 现在分词和不定式都是可以做状语的,但二者有区别
  20. 树莓派 android 3g,树莓派安装配置3G/4G移动网卡

热门文章

  1. 如何给PDF加密码保护?这3种方法总有一个能用上
  2. 什么是转义字符?为什么用转义字符?常见转义字符使用情况?
  3. 五、嵌入式学习笔记--GPIO接口
  4. 苹果手机科学计算机怎样调用,iOS上的表达式科学计算器Calculator i++使用说明
  5. ios开发-- URL Schemes 使用详解
  6. html5自动淡入淡出图片,利用html5实现图片的淡入淡出效果
  7. js每日一题(10)
  8. Facebook:Novi数字钱包“已经准备好进入市场”
  9. Method annotated with @Bean is called directly. Use dependency injection instead.
  10. 为什么越来越多的人放弃欧美市场,转做Starday日本市场?