最も簡単なクエリです。MyBatis SELECTがJDBCよりも遅い理由
マイJDBCコードはこのようなものです:
String sql = "SELECT videos.id, videos.connector_id, videos.season_number FROM videos WHERE videos.connector_type = 'show';";
System.out.println("Create statement...");
Scanner scanner = new Scanner(System.in);
while (true) {
int input = scanner.nextInt();
long start = System.nanoTime();
stmt = conn.prepareStatement(sql);
ResultSet resultSet = stmt.executeQuery();
System.out.println("Time 1: " + TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - start));
}
そして、MyBatisのコードは次のようである:
<select id="queryTest" resultType="map">
SELECT videos.id, videos.connector_id, videos.season_number FROM videos WHERE connector_type = 'show';
</select>
try (SqlSession session = DatabaseConnFactory.getSqlSession()) {
start = System.nanoTime();
maps = session.selectList("queryTest", parameterWrapper);
System.out.println("Time 1: " + TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - start));
}
は、最初のクエリを考慮していない、次のクエリのために、JDBCは常におよそ6msの〜10msのを取りますMyBatisは約31〜35msで約3倍です。
複雑なクエリ(6つの内部結合とその中での順序付け)の場合、JDBCは25〜30msしかかかりませんが、MyBatisは80〜100ms必要です。
私は、session.selectList、session.select、およびsession.selectCursorを使用する代わりにマッパーの使用を避けようとしましたが、MaBatis.Mapperよりも明らかに優れたパフォーマンスはありません。
MyBatisのパフォーマンスを向上させるにはどうすればよいですか?コードの下で述べたように
上記の例では、2つの異なるSQL要求があります。同じリクエストを比較しようとしましたか? –
私はvideo.id、videos.connector_id、videos.season_numberを選択してみました。ビデオからどこのconnector_type = 'show'; JDBCでは、10ミリ秒未満しかかかりません(最初のクエリを除外します) – Cuero