iBATIS.NET动态SQL的性能测试

日期:2009-04-14 | 作者: Allen

iBATIS.NET是一款灵活、强大的ORM工具。其动态SQL的功能更是方便,我们可以构建一个较为通用的SQL代码段,实现灵活的多条件检索功能。那么这样较为通用的动态SQL功能对性能有什么影响呢?这就引出了本次测试的目的。

目的

iBATIS.NET中使用动态SQL对性能的影响到底多大?

测试内容

对一个10000条数据的数据表进行读取操作。

测试1:分别对下面两段SQL进行3次测试,每次测试循环10次。(红色处为差别,也就是动态SQL的代码段)输出每次测试所耗时间,单位为毫秒。

动态SQL

<select id="SelectBook" parameterClass="Hashtable" resultMap="BookResult">
      SELECT * FROM books
      <include refid="SegmentSelectBook"></include>
</select>

无动态SQL

<select id="SelectBook2" parameterClass ="Hashtable" resultMap="BookResult">
  SELECT * FROM books
</select>

测试2:在测试1的基础上,增加读取条件(WHERE id=BOOKID),分别对下面两段SQL进行3次测试,每次循环100次。输出每次测试所耗时间,单位为毫秒。

动态SQL

<select id="SelectBook" parameterClass="Hashtable" resultMap="BookResult">
      SELECT * FROM books
      <include refid="SegmentSelectBook"></include>
</select>

无动态SQL

<select id="SelectBook4" parameterClass ="Hashtable" resultMap="BookResult">
  SELECT * FROM books WHERE id=#id#
</select>

测试结果

结论

动态SQL对性能有影响,是意料当中的事儿。不过可以看到的是,在获取10000条数据的时候,基本影响在1s以内,(有趣的是,由于本机的关系,有一次测试无动态SQL比动态SQL耗时长,这次测试我认为可以无视了)。在获取1条数据的时候,影响在5ms左右。

所以,测试结论是,动态SQL对性能的影响有限,请尽情发挥动态SQL的灵活优势。

也许你还会喜欢

Leave a Reply

Additional comments powered by BackType