sql >> データベース >  >> RDS >> Oracle

JDBC for Oracleを使用してResultSetを反復処理するには、約16秒かかりますか?

    4000行10列のテーブルをそれぞれ10文字で設定し、次のアプローチ(RealTimeCounter)を使用して簡単なパフォーマンステストを行いました。 start()間のリアルタイムを測定するクラスです。 およびstop() ):

    List<String> myResult = new ArrayList<>();
    ResultSet rs = s.executeQuery("SELECT * FROM Performance");
    
    RealTimeCounter rtc = new RealTimeCounter();
    rtc.start();
    while(rs.next()) {
        myResult.add(rs.getString(1));
    }
    rtc.stop();
    System.out.println(rtc);
    

    結果:

    • デフォルトのフェッチサイズ:実行時間は約です。 20秒
    • フェッチサイズ=100:実行時間は約2.2秒です
    • フェッチサイズ=500:実行時間は約450ミリ秒です
    • フェッチサイズ=2000:実行時間は約120ミリ秒です
    • フェッチサイズ=4000:実行時間は約50ミリ秒です
    • フェッチサイズ=4001:実行時間は約10ミリ秒です (!!)

    したがって、フェッチサイズはします 実行速度に大きな影響を与えます。

    一方、フェッチサイズはメモリ消費にいくらかの影響を与えることに注意してください。興味深いことに、Runtime.getRuntime().freeMemory();を使用した簡単な分析 上記のコードの前後で、影響は私が予想するよりもはるかに少ないことが示されました。私が得た数字は次のとおりです:

    • デフォルトのフェッチサイズ:665k
    • フェッチサイズ=100:665k
    • フェッチサイズ=500:665k
    • フェッチサイズ=2000:743k
    • フェッチサイズ=4000:821k
    • フェッチサイズ=4001:861k


    1. TYPEPROPERTY()を使用して、SQLServerのデータ型に関する情報を返します。

    2. 簡単な例でSQLServerHierarchyIDを使用する方法

    3. そのような列sqlite例外はありません

    4. FieldShieldでのプロキシベースの動的データマスキング