转自:http://blog.csdn.net/caomiao2006/article/details/52140993 由于GROUP BY 实际上也同样会进行排序操作,而且与ORDER BY 相比,GROUP BY 主要只是多了排序之后的分组操作.当然,如果在分组的时候还使用了其他的一些聚合函数,那么还需要一些聚合函数的计算.所以,在GROUP BY 的实现过程中,与 ORDER BY 一样也可以利用到索引. 在MySQL 中,GROUP BY 的实现同样有多种(三种)方式,其中有两种方式会
1.建立索引的时机:若表中的某字段出现在select.过滤.排序条件中,为该字段建立索引是值得的.2.对于like '%xxx'的模糊查询,普通的索引是无法满足的,需要建立全文索引.3.对于有多个条件的,比如: "...where a=xxx and b=yyy","...where a=xxx order by b","...where a=xxx group by b".需要使用组合索引.但是组合索引只能在SQL语句中满足"最左前缀
1.使用松散(Loose)索引扫描实现 GROUP BY 何谓松散索引扫描实现 GROUP BY 呢?实际上就是当 MySQL 完全利用索引扫描来实现 GROUP BY 的时候,并不需要扫描所有满足条件的索引键即可完成操作得出结果. 下面我们通过一个示例来描述松散索引扫描实现 GROUP BY,在示例之前我们需要首先调整一下 group_message 表的索引,将 gmt_create 字段添加到 group_id 和 user_id 字段的索引中: 代码如下 复制代码 1 sky@loca
什么是松散索引? 答:实际上就是当MySQL 完全利用索引扫描来实现GROUP BY 的时候,并不需要扫描所有满足条件的索引键即可完成操作得出结果. 要利用到松散索引扫描实现GROUP BY,需要至少满足以下几个条件:◆ GROUP BY 条件字段必须在同一个索引中最前面的连续位置:◆ 在使用GROUP BY 的同时,只能使用MAX 和MIN 这两个聚合函数(新版本支持更多):◆ 如果引用到了该索引中GROUP BY 条件之外的字段条件的时候,必须以常量形式存在: 为什么松散索引扫描的效率会很高
是什么 索引用于快速的查询某些特殊列的某些行.如果没有索引, MySQL 必须从第一行开始,然后通过搜索整个表来查询有关的行.表越大,查询的成本越大.如果表有了索引的话,那么 MySQL 可以很快的确定数据的位置,而不用查询整个表格.这比顺序的读取每一行要快的多.索引就像我们查字典时的目录一样,我们通过查询字典的目录,可以定位到某一行数据. 大多数的 MySQL 的索引(主键索引,唯一索引,普通索引,全文索引)都是 B-trees 结构.例外的情况有:在空间数据类型使用 R-trees 结构.