テストケース:H2最適化select文/シャットダウンデフラグ
drop table master;
create table master(id int primary key, fk1 int, fk2 int, fk3 int, dataS varchar(255), data1 int, data2 int, data3 int, data4 int,data5 int,data6 int,data7 int,data8 int,data9 int,b1 boolean,b2 boolean,b3 boolean,b4 boolean,b5 boolean,b6 boolean,b7 boolean,b8 boolean,b9 boolean,b10 boolean,b11 boolean,b12 boolean,b13 boolean,b14 boolean,b15 boolean,b16 boolean,b17 boolean,b18 boolean,b19 boolean,b20 boolean,b21 boolean,b22 boolean,b23 boolean,b24 boolean,b25 boolean,b26 boolean,b27 boolean,b28 boolean,b29 boolean,b30 boolean,b31 boolean,b32 boolean,b33 boolean,b34 boolean,b35 boolean,b36 boolean,b37 boolean,b38 boolean,b39 boolean,b40 boolean,b41 boolean,b42 boolean,b43 boolean,b44 boolean,b45 boolean,b46 boolean,b47 boolean,b48 boolean,b49 boolean,b50 boolean);
create index idx_comp on master(fk1,fk2,fk3);
@loop 5000000 insert into master values(?, mod(?,100), mod(?,5), ?,'Hello World Hello World Hello World',?, ?, ?,?, ?, ?, ?, ?, ?,true,true,true,true,true,true,false,false,false,true,true,true,true,true,true,true,false,false,false,true,true,true,true,true,true,true,false,false,false,true,true,true,true,true,true,true,false,false,false,true,true,true,true,true,true,true,false,false,false,true);
1. select文次は30秒を要します。応答時間を最適化する方法はありますか?
SELECT count(*), SUM(CONVERT(b1,INT)) ,SUM(CONVERT(b2,INT)),SUM(CONVERT(b3,INT)),SUM(CONVERT(b4,INT)),SUM(CONVERT(b5,INT)),SUM(CONVERT(b6,INT)),SUM(CONVERT(b7,INT)),SUM(CONVERT(b8,INT)),SUM(CONVERT(b9,INT)),SUM(CONVERT(b10,INT)),SUM(CONVERT(b11,INT)),SUM(CONVERT(b12,INT)),SUM(CONVERT(b13,INT)),SUM(CONVERT(b14,INT)),SUM(CONVERT(b15,INT)),SUM(CONVERT(b16,INT))
FROM master
WHERE fk1=53 AND fk2=3
2.シャットダウンデフラグを試みました。しかし、この声明は私のテストケースで約40分かかった。シャットダウンのデフラグ後、選択には最大15秒かかります。文をもう一度実行すると、1秒以下かかります。サーバを停止して起動しても、文は約1秒かかります。 H2に永続キャッシュがありますか?
インフラ:Webブラウザー< - > H2コンソールサーバ< - > H2 DB:1.3.158
クエリのスキャンの行数はいくつですか? 50000(不明)のようです。 –
PUBLIC.MASTER /* PUBLIC.IDX_COMP FROM COUNT(*)、 SUM(CONVERT(B1、INTEGER))、 SUM(CONVERT(B16、INTEGER)) を選択:FK1 = 53 AND FK2 = 3 */ /* scanCount:50001 */ WHERE(FK1 = 53) AND(FK2 = 3) /* 合計:55199 MASTER.IDX_COMP読み取り:481(0%) MASTER.MASTER_DATAリード:54718(99%) */ (1 Datensatz、27368 ms) – Peter