テーブルA
CREATE table table_a
(
YYYYMM CHAR(6) NOT NULL,
CD1 CHAR(6) NOT NULL,
CD2 CHAR(2) NOT NULL,
CD3 CHAR(5) NOT NULL,
CD4 CHAR(2) NOT NULL,
CD5 CHAR(3) NOT NULL,
MAX1 CHAR(5) NOT NULL ,
MIN1 CHAR(5) NOT NULL,
CD6 CHAR (3) NOT NULL,
PRIMARY KEY (YYYYMM, CD1, CD2)
);
table_aには約3000万件のレコードがあります。
実行環境はAccess2016とOracleになっておりました。
これをAccess2016とMySQLで実現することになりました。
CD3,CD4,CD5をキーにしてMAX,MIN,COUNTの集合関数を使用します。
しかし、処理速度がOracleでは数分でしたがMySQLに変更すると処理時間が大幅に増え数十分から
1時間以上かかるようになりました。SQLについてはOracleとMySQLは同じ内容です。
今までのSQL
SELECT
CD3
, CD4
, CD5
, MAX(MAX1)
, MIN(MIN1)
, COUNT(CD6)
FROM table_a
GROUP BY
CD3
, CD4
, CD5
で実現定義してしておりました。
これをMySQLでは例として
SELECT
CD3
, CD4
, CD5
, MAX(MAX1)
, MIN(MIN1)
, COUNT(CD6)
FROM
(
SELECT DISTINCT
CD3
, CD4
, CD5
FROM table_a
) a
GROUP BY
CD3
, CD4
, CD5
イメージ的には、まずCD3,CD4,CD5で重複を除外しその結果からグルーピングして集合関数を
利用すればスピードアップが図れると思っておりますが、上記のSQLでは文法エラーになります。
この文法では文法エラーになって当然です。
とにかく処理時間を短縮する手法として皆様のお知恵をお借りしたいと思っております。
ご教示のほどよろしくお願いいたします。