約50M行とフォーマットのテーブルがあります:
CREATE TABLE `big_table` (
`id` BIGINT NOT NULL,
`t1` DATETIME NOT NULL,
`a` BIGINT NOT NULL,
`type` VARCHAR(10) NOT NULL,
`b` BIGINT NOT NULL,
`is_c` BOOLEAN NOT NULL,
PRIMARY KEY (`id`),
INDEX `a_b_index` (a,b)
) ENGINE=InnoDB;
t2次に、インデックスなしでtable を定義します。
Create table `t2` (
`id` BIGINT NOT NULL,
`a` BIGINT NOT NULL,
`b` BIGINT NOT NULL,
`t1min` DATETIME NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
次にt2、クエリを使用して入力しますbig_table(これにより、約 12M 行が追加されます)。
insert into opportunities
(id, a,b,t1min)
SELECT id,a,b,min(t1)
FROM big_table use index (a_b_index)
where type='SUBMIT' and is_c=1
GROUP BY a,b;
このクエリで 5000 個の個別のデータを処理するのに約 1 分かかることがわかり(a,b)ましたbig_table。
には 12M の個別があるため(a,b)、big_tableすべての でクエリを実行するには約 40 時間かかりますbig_table。
何がうまくいかないのですか?
私がそうSELECT ...すると、クエリは約 2 秒で 5000 行を実行します。ISELECT ... INTO OUTFILE ...の場合、クエリは 5000 行で 60 秒かかります。
EXPLAIN SELECT ...与えます:
id,select_type,table,type,possible_keys,key,key_len,ref,rows,Extra
1,SIMPLE,stdnt_intctn_t,index,NULL,a_b_index,16,NULL,46214255,"Using where"