我在Linux下使用MariDB 10.1.18。Group By MariaDB非常慢
我有一个简单的表(t)的具有以下结构:
| id | a | b | c |
-------------------
| 1 | 3 | 7 | 10 |
| 2 | 4 | 6 | 9 |
| 3 | 2 | 7 | 11 |
| 4 | 3 | 5 | 10 |
| 5 | 4 | 8 | 12 |
| 6 | 2 | 9 | 6 |
id is primary key
a - has BTREE index
b - has HASH index
c - has HASH index
我承担主密钥被自动索引。 我的查询很简单:
SELECT * FROM t GROUP BY a
为了改进性能,使用的发动机是MEMORY
。
对于500万行,上述查询需要1秒来完成并使用一个CPU的线程到100%。现在列a有大约150个唯一值。
我认为这可以解决,如果我使用松散索引搜索。不幸的是,这似乎在MariaDB中不起作用,因为它从未被使用过。 loosescan设置为开启。
我已经试过
SELECT MAX(a) FROM t GROUP BY a
在我的数据库,需要1.1秒。
问题是,我该如何让这个选择快速发展?就像0.05秒。
谢谢!
请发布解释结果 – Shadow
需要注意的一点是:只有通过标准开发技术才能实现这一目标。您可能不得不要求DBA配置您的MySQL实例以获得更高的性能。 – Shadow
其目的是过滤掉某些行,然后返回由a分组的最高c行。例如:选择* FROM t WHERE b IN(5,6,7)和IN(2,3)GROUP BY cORT BY c DESC。然而,这不会给出正确的结果,因此连接是必要的。但我不会深究这一点。 – SilviuT