如何使用 COUNT(*) 和 GROUP BY 优化 mysql 查询
How to optimize mysql query with COUNT(*) and GROUP BY
我原来有table4列,说明如下:
+----------+-------------+------+-----+---------+-------+
| 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 |
我想知道我是否可以在这个查询中使用索引,或者任何其他方式来优化它。现在线路很多,效率很低
非常感谢您的帮助!
您应该创建 (FieldID, FieldID2) 的多列索引。
创建 FieldID 的索引,如果按 FieldID2 分组。那一定要提高速度。
此外,我建议您将 count(*) 更改为 count('myIntColumn'),这样也可以提高速度。
我原来有table4列,说明如下:
+----------+-------------+------+-----+---------+-------+
| 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 |
我想知道我是否可以在这个查询中使用索引,或者任何其他方式来优化它。现在线路很多,效率很低
非常感谢您的帮助!
您应该创建 (FieldID, FieldID2) 的多列索引。
创建 FieldID 的索引,如果按 FieldID2 分组。那一定要提高速度。
此外,我建议您将 count(*) 更改为 count('myIntColumn'),这样也可以提高速度。