0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

大量データ取得SQLのパフォーマンスの対策ーーCursor(カーソル)(kosekiメモNO4)

Last updated at Posted at 2024-10-24

データ移行PJTの中に、大量データ取得sqlのパフォーマンスがすごく悪くて、対策などをメモしておきます。

背景

移行元データ量は数千万が存在して、全量データを一発で取得するのはかなり時間がかかります。
対策としては、limit offsetを利用して、単位件数で取得していきました。
select * from table limit 10000 offset 0;

が、offsetは大きくなると、実施時間が長くなり、落ちることも発生しました。

対策

1. 取得結果のreturn listはListからCursorに変更する。
import org.apache.ibatis.cursor.Cursor;

2. select sqlにfetchSizeを追加する。

サンプルソース:

testMapper.java
package com.xxx.xxx.xxx.xxx.test;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.cursor.Cursor;

@Mapper
public interface TestMapper{

Cursor<testDto> selectAll();

}
testMapper.xml
<select id="selectAll" fetchSize="10000" restultType="com.xxx.xxx.xxx.xxx.test.testDto">
    select * from testTable
    where a = ''
</select>


以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?