0

我创建了下表:

CREATE TABLE `clicks_summ` (
    `dt` INT(7) UNSIGNED NOT NULL,
    `banner` SMALLINT(6) UNSIGNED NOT NULL,
    `client` SMALLINT(6) UNSIGNED NOT NULL,
    `channel` SMALLINT(6) UNSIGNED NOT NULL,
    `cnt` INT(11) UNSIGNED NOT NULL,
    `lpid` INT(11) NULL DEFAULT NULL,
    UNIQUE INDEX `dt` (`dt`, `banner`, `client`, `channel`, `lpid`),
    INDEX `banner` (`banner`),
    INDEX `channel` (`channel`),
    INDEX `client` (`client`),
    INDEX `lpid` (`lpid`),
    INDEX `cnt` (`cnt`)
)
COLLATE='utf8_unicode_ci'
ENGINE=InnoDB;

我正在使用以下查询从该表中获取行/记录:

 select client, sum(cnt) cnt
 from clicks_summ cs
 group by client;

这太可怕了!执行此查询大约需要一秒钟。EXPLAIN给我看 解释 SQL 语句结果

所以,问题是:我怎样才能加快这个查询?我试过在不同的字段上索引这个表,但没有任何合理的成功。现在这张表有331 036行,我猜,没有那么大。

4

2 回答 2

2

试试 craete INDEX client_cnt(client, cnt)。使查询更快的另一种方法是升级您的硬件:)

于 2012-12-28T06:40:55.367 回答
0

一件很酷的事情

如果你的 where 子句中总是有 5 col,而 5 col 的分组索引将优于 5 个单独的索引;)

于 2012-12-28T07:38:49.617 回答