如何使用COUNT(*)和GROUP BY优化mysql查询

时间:2015-08-17 20:12:40

标签: mysql optimization count group-by

我有4列的原始表,描述如下:

+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| FieldID  | varchar(10) | NO   | MUL | NULL    |       |
| PaperID  | varchar(10) | NO   |     | NULL    |       |
| RefID    | varchar(10) | NO   |     | NULL    |       |
| FieldID2 | varchar(10) | NO   | MUL | NULL    |       |
+----------+-------------+------+-----+---------+-------+

我想使用COUNT(*)GROUP BY

运行查询
select FieldID, FieldID2, count(*) from nFPRF75_1 GROUP BY FieldID, FieldID2

我已经在列FieldID和列FieldID2上创建了索引,但是,它们似乎无效。我还尝试了 OPTIMIZE table_name 并在这两列上创建了冗余索引(正如其他优化问题所示),遗憾的是它没有成功任

以下是我从EXPLAIN获得的信息:

 | id | select_type | table     | type | possible_keys | key  | key_len | ref  | rows     | Extra                           |
 +----+-------------+-----------+------+---------------+------+---------+------+----------+---------------------------------+
 |  1 | SIMPLE      | nFPRF75_1 | ALL  | NULL          | NULL | NULL    | NULL | 90412507 | Using temporary; Using filesort |

我想知道我是否可以在此查询中使用索引,或者以任何其他方式对其进行优化。现在它的效率非常低,因为有很多行。

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您应该创建(FieldID,FieldID2)的多列索引。

答案 1 :(得分:0)

如果您要对它们进行分组,请创建FieldID的索引,FieldID2。这必须提高速度。

另外,我建议您将count(*)更改为count('myIntColumn'),这样可以提高速度。

相关问题