现有两个数据库操作类:通用数据库操作类DbHelper,专用数据库操作类OracleHelper
内部代码基本相同,差别只在数据类型不一样
例如:DbConnection / OracleConnection DbParameter / OracleParameter
创建4个页面,分别为DbHelper_Param , DbHelper_NoParam , OracleHelper_Param , OracleHelper_NoParam
在Oracle中建立表,无索引,无依赖,每次测试用事务插入1000条数据
| Name | Type |
| ID | NUMBER |
| TITLE | VARCHAR2(500) |
| CONTENT | VARCHAR2(500) |
| LINKS | VARCHAR2(50) |
| COMMENTS | VARCHAR2(100) |
| CREATOR | NUMBER |
| CREATEDATE | DATE |
| EFFECT | CHAR(2) |
| COMMEND | CHAR(2) |
| REMARK | VARCHAR2(100) |
DbHelper_Param中的代码片段为
DbHelper_NoParam中的代码片段为
以此类推OracleHelper_Param,OracleHelper_NoParam
以下为测试结果,单位毫秒
| DbHelper_Param | DbHelper_NoParam | OracleHelper_Param | OracleHelper_NoParam |
| 2781.25 | 1828.125 | 2812.5 | 1875 |
| 2703.125 | 1859.375 | 2750 | 1828.125 |
| 2781.25 | 1828.125 | 2468.75 | 1781.25 |
| 2625 | 1843.75 | 2687.5 | 1843.75 |
| 3015.625 | 2328.125 | 2468.75 | 1687.5 |
| 2640.625 | 1890.625 | 2453.125 | 1796.875 |
| 2718.75 | 1906.25 | 2484.375 | 2078.125 |
| 2671.875 | 1859.375 | 2453.125 | 1687.5 |
| 2937.5 | 1875 | 2453.125 | 1687.5 |
| 2640.625 | 1937.5 | 2531.25 | 1781.25 |
| 2625 | 1890.625 | 2468.75 | 1640.625 |
| 2703.125 | 1843.75 | 2656.25 | 1671.875 |
去掉一个最大值,和一个最小值,平均值为
| 2720.3125 | 1873.4375 | 2542.1875 | 1764.0625 |
通过测试可以看出,时间差主要体现在创建参数数组上
DbHelper :2720.3125 - 1873.4375 = 846.875
OracleHelper :2542.1875 - 1764.0625 = 778.125
而原以为时间差主要体现在延迟实例化和数据类型转换,但实际上该时间约等于
相比于创建参数数组的时间,小很多。
据此判断,造成公司软件添加数据缓慢的原因,是由于插入大表(平均约40-50,最多174个字段)的参数数组引起的,而非数据库操作类。
而对于不同数据库操作类所带来的性能损失,我认为就目前的情况来说可以忽略不计。
对于追求<50毫秒级别的性能来说,还是提高软件整体质量来的划算一些。
由此引发一个问题:
对于拼SQL语句,貌似大家都很鄙视。
但是对于没有用户输入,不存在注入风险的程序来说,以上数据为例,单纯的无参数SQL语句比使用参数传值的SQL插入速度快约31.8%的速度。
并且随着参数的增多,该数值会越来越大。
对于拼写SQL语句,大家的观点如何呢?