如何为iBatis select语句设置fetchSize

nku*_*har 8 java performance ibatis resultset

我在Java中使用iBatis作为ORM框架.我有一个选择声明

<select id="getList" resultMap="correctMap">
    SELECT *
    FROM SOME_TABLE
</select>
Run Code Online (Sandbox Code Playgroud)

我正在使用queryForList方法:

List<MappedObject> list = getSqlMapClientTemplate().queryForList("getList");
Run Code Online (Sandbox Code Playgroud)

但是它检索了大量数据,并且此查询的性能非常慢.

我对这个问题的假设是iBatis具有默认的提取大小(例如在JDBS中是10),所以这就是它如此慢的原因.所以我想设置更大的提取大小(例如1000).我怎么能这样做?

还是我看错了?

注意:我需要所有数据,因此设置queryForList方法中的最大结果对我来说不是一个合适的解决方案.

List queryForList(String id,
                  Object parameterObject,
                  int skip,
                  int max) 
Run Code Online (Sandbox Code Playgroud)

Rok*_*okL 12

<select id="SELECT_TABLE" parameterType="String" fetchSize="500" resultType="hashmap">
    SELECT * FROM TABLE WHERE NAME = #{value}
</select>
Run Code Online (Sandbox Code Playgroud)

  • 我可以动态设置fetchSize值吗? (2认同)
  • 为了记录(我的情况),检索 109k 记录需要 1 分 40 秒。设置 fetchSize=75 将其减​​少到 15 秒,fetchsize=500 将其减少到 4 秒,fetchSize=1000 将其减少到 2.8 秒,fetchSize=2000 将 109,000 行的检索减少到 2.3 秒。这是在基于 VM 的 oracle 服务器上。您的里程可能会有所不同(也取决于特定的 SQL),但对我来说,最佳位置是 fetchsize 介于 500 和 1000 之间。 (2认同)