iBATIS.NET动态SQL的性能测试
日期:2009-04-14 | 作者: AlleniBATIS.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的灵活优势。