0

JOIN を実行するためにインデックスを最適化し、結合されたテーブルの列の 1 つを GROUP BY しようとしています。

以下のスクリプトを実行してインデックスをいじってテストしていますが、3番目のクエリに必要なインデックスがわかりません。

解決済み:ダミー データを追加すると、SQL の動作が異なり、以前に試したインデックスの 1 つが問題なく動作します。

CREATE DATABASE stats_idx_test;

USE stats_idx_test;

DROP TABLE stats;
CREATE TABLE stats (article_id INT, cnt INT, type INT);
ALTER TABLE stats ADD INDEX idxs1 (article_id, cnt, type);

DROP TABLE article;
CREATE TABLE article (id INT, cat_id INT);
ALTER TABLE article ADD INDEX idxa2 (cat_id, id);

INSERT INTO article (id, cat_id) VALUES (1, 1);
INSERT INTO stats (article_id, cnt, type) VALUES (1, 9, 1);
INSERT INTO stats (article_id, cnt, type) VALUES (1, 13, 2);

EXPLAIN 
SELECT SUM(stats.cnt)
FROM stats
WHERE stats.type = 1 AND stats.article_id = 1;
-- Using where; Using index

EXPLAIN 
SELECT article.cat_id, SUM(stats.cnt)
FROM stats
JOIN article ON (stats.article_id = article.id)
WHERE stats.type = 1 AND article.cat_id = 1;
-- Using where; Using index

EXPLAIN 
SELECT article.cat_id, SUM(stats.cnt)
FROM stats
JOIN article ON (stats.article_id = article.id)
WHERE stats.type = 1
GROUP BY article.cat_id;
-- Using index
-- Using where; Using index
4

2 に答える 2

0

group byには、cat_idのインデックスが必要です。現在のインデックスは適用できません。

グループ化とインデックス作成

また、idを主キーにすることを検討する必要があります。

于 2013-03-07T18:20:40.160 に答える
0

ダミー データを追加すると、SQL の動作が異なり、以前に試したインデックスの 1 つが問題なく動作します。

于 2013-03-08T09:12:43.077 に答える