私は、oracleのデータをRDMSとIgnite Integrationを介してIgniteキャッシュにロードします。キャッシュのサイズは4000万です。 私は、次の3つのようないくつかの単純な集計SQLを実行すると:count、max、minのような簡単な集計は極端に遅い
select count(id) from Person
、
select max(id) from Person
select min(id) from Person
は、それぞれが約5分かかります。
これらは非常に簡単な操作であり、データを移動させずにマップを縮小したメカニズムで行うことができるので、非常に高速でなければなりません。
バレンティンのコメント@パー:私はid
カラムがインデックスを有効にしていると思います
。出力は
で、
を私は計画 explain select min(id) from Person
を説明するためにSQLを実行すると
idxs.add(new QueryIndex("id", true, "PK_ID"));
:私はCacheConfigクラスを生成するためにignite-schema-import.sh
を使用しています、そして、それは次のコードが含まれています SELECT MIN(ID) AS __C0 FROM "Person".PERSON /* "Person".PK_ID */, SELECT MIN(__C0) AS __C0 FROM PUBLIC.__T0 /* "Person"."merge_scan" */,
また、次のコードのOFFHEAP_TIEREDメモリモードを使用しています。
cacheConfig.setCacheMode(CacheMode.PARTITIONED);
cacheConfig.setBackups(0);
cacheConfig.setMemoryMode(CacheMemoryMode.OFFHEAP_TIERED);
cacheConfig.setOffHeapMaxMemory(0);
cacheConfig.setOffHeapMaxMemory(48*1024*1024*1024);
cacheConfig.setStatisticsEnabled(true);
cacheConfig.setCopyOnRead(false);
ありがとう@Valentin。あなたのコメントごとに質問を更新しました。どうぞご覧ください。 – Tom
https://apacheignite.readme.io/docs/sql-performance-and-debugging#section-using-h2-debug-consoleツールでインデックス情報を確認しました。インデックスが正しいかどうかを調べます。 – Tom
@Tom、私の応答の更新を参照してください。 –