7.2.5 GROUP BY和相关条件

这些是主要优化发生集团和相关项目(,COUNT (),MAX (),MIN (),SUM (),AVG (),不同的())。

  • 集团将使用一个索引,如果一个人的存在。

  • 集团将使用排序,如果没有索引。优化器可能会选择使用一个哈希表。

  • 的情况下GROUP BY x, x,优化器将会意识到命令是不必要的,因为集团出来的x

  • 优化器包含转移某些代码条件的在哪里条款;然而,这个代码不是手术的时间写作。看到:/ sql / sql_select.cc,加入:优化()后,# ifdef HAVE_REF_TO_FIELDS

  • 如果表处理程序提供了一个快速的行数,然后查询

    从表1 SELECT COUNT (*);

    得到了没有经历所有的行数。这适用于MyISAM表,但不是InnoDB表。请注意,查询

    从表1选择计数(column1);

    不受相同的优化,除非吗column1被定义为非空

  • 新的优化存在MAX ()MIN ()。例如,考虑查询

    选择马克斯(column1)从Table1 column1 < ' a ';

    如果column1是索引,那么很容易找到最高的价值通过寻找“一个”在索引中,之前回到的关键。

  • 查询优化器转换的形式

    选择不同的column1从表1;

    从表1组选择column1 column1;

    当且仅当这两个条件是正确的:

    • 集团可以用索引。(这意味着只有一个表中条款,没有在哪里条款)。

    • 没有限制条款。

    因为截然不同的并不总是改变集团查询的,不要指望截然不同的总是导致命令结果集。然而,(你可以依靠该规则集团,除非查询包括按零。)

看到:/ sql / sql_select.cc,opt_sum_query (),/ sql / sql_select.cc,remove_duplicates ()