优化具有计数和分组依据的MySQL查询

时间:2018-09-21 00:07:57

标签: mysql sql

我有一个简单的mysql表,其中包含约1200万条记录。

CREATE TABLE IF NOT EXISTS md5_table(
    md5 char(32),
    category INTEGER NOT NULL,
    PRIMARY KEY (md5),
    INDEX INDEX_MD5(md5)
 );

我想计算上表中的类别。

SELECT category, count(category) FROM md5_table
GROUP BY category;

我们经常使用此查询,执行该查询大约花了10秒钟。我想将其减少到毫秒。

1 个答案:

答案 0 :(得分:0)

您可以尝试一下。假设您有一个category表。然后尝试:

SELECT c.category,
       (SELECT COUNT(*)
        FROM md5_table t
        WHERE t.category = c.category
       ) as cnt
FROM category c;

这需要在md5_table(category)上建立索引。

我发现MySQL在使用索引进行聚合查询方面相当挑剔。您可能会发现此方法可以加快您的特定查询的速度。