約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"