MySQL的sum函数优化

看这里


有一张表,结构如下 :


  1. +------------------+--------------+------+-----+---------+----------------+
  2. | Field            | Type         | Null | Key | Default | Extra          |
  3. +------------------+--------------+------+-----+---------+----------------+
  4. | ID               | bigint(20)   | NO   | PRI | NULL    | auto_increment |
  5. | DTYPE            | varchar(31)  | YES  |     | NULL    |                |
  6. | COUNT            | int(11)      | YES  |     | NULL    |                |
  7. | STATUS           | varchar(255) | YES  |     | NULL    |                |
  8. | TYPE             | varchar(255) | YES  |     | NULL    |                |
  9. | BACKENDRECORD_ID | bigint(20)   | YES  | MUL | NULL    |                |
  10. | FRONTRECORD_ID   | bigint(20)   | YES  | MUL | NULL    |                |
  11. +------------------+--------------+------+-----+---------+----------------+
tab表数据量是百万级或者千万级的,以下该查询语句的查询时间较长。
SELECT STATUS, SUM(COUNT) FROM tab GROUP BY STATUS ;
在mysql优化的方法中,有这么两条:
经常同时存取多列,且每列都含有重复值可考虑建立组合索引;
组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列。
所以你可以试试下面方法:在STATUS和COUNT两字段上建立组合索引,以STATUS为前导列(如果该字段值很长,可以指定长度)
ALTER TABLE tab ADD KEY(STATUS(10),COUNT);
总结:使用恰当的索引使sql的效率倍增,类似sum(),min(),max()这些都需要在字段上建索引。