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;

そしてそれはひどいです!このクエリの実行には約1秒かかります。EXPLAIN見せてくれ SQLステートメントの結果を説明する

したがって、問題は、このクエリをどのように高速化できるかということです。さまざまなフィールドでこのテーブルのインデックスを作成しようとしましたが、妥当な成功はありませんでした。現在331 036、このテーブルには行がありますが、それほど大きくはないと思います。

4

2 に答える 2

2

craeteを試してくださいINDEX client_cnt(client, cnt)。クエリを高速化するもう1つの方法は、ハードウェアをアップグレードすることです:)

于 2012-12-28T06:40:55.367 に答える
0

1つのクールなこと

5列のグループ化インデックスが5つの個別のインデックスよりも優れている場合に、where句に常に5列がある場合;)

于 2012-12-28T07:38:49.617 に答える