1

ユーザーと購入の 2 つの大きなテーブルがあります (それぞれ 10^6 行と 10^8 行)。以下のクエリを実行するために mySql を使用していますが、計算には時間がかかります。実行を高速化する最良の方法は何ですか? インデックスを使用するか、クエリを 2 つのクエリに分割する必要がありますか?

CREATE TABLE user(
uID INTEGER, 
countryCode varchar(2)
);

CREATE TABLE purchases(
uID INTEGER, 
productID INTEGER, 
price INTEGER
);

SELECT U.countryCode AS country, SUM(P.price) AS amount
FROM user U, purchases P
WHERE U.uid = P.uid
GROUP BY U.countryCode
ORDER BY U.countryCode ASC;

問題は Type:All にあると思います。説明すると、次のようになります。

id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra  
1   SIMPLE  U   ALL     NULL    NULL    NULL    NULL    9653    Using temporary; Using filesort  
1   SIMPLE  P   ALL     NULL    NULL    NULL    NULL    97816   Using where; Using join buffer
4

2 に答える 2

1

これを試して

CREATE INDEX countryCode_IDX ON USER(countryCode);

クエリでこのインデックスを使用します。

SELECT U.countryCode AS Country, Sum(P.Price) AS Amount FROM USER U FORCE INDEX (countryCode_IDX) LEFT JOIN Purchases P ON U.uid = P.uid GROUP BY U.countryCode ORDER BY U.countryCode ASC;

uid 列に外部キー インデックスを使用します。

于 2013-10-21T03:30:07.953 に答える