在Java中绑定变量性能测试

听说很多人在谈论“ 绑定变量 ”将提高Java应用程序的性能。 这是真的吗? 我对此表示怀疑,并在PreparedStatement类中的 Bind变量与Statement类中的Non Bind变量之间进行了简单的性能测试

我该如何测试?

我将创建一个简单的Java类,并继续以绑定变量方法非绑定变量方法向PostgreSQL数据库发送SQL查询。 Java类将显示执行结果时间的开始和结束。

使用什么工具?

1)PostgreSQL数据库
2)PostgreSQL JDBC驱动程序
3)Java JDBC PrepareStatement和Statement类

这是PreparedStatement类中的绑定变量的源代码

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Date;

public class BindVariableJDBC {
  public static void main(String[] argv) {
  
      ResultSet rs = null;
      Connection conn = null;
      PreparedStatement pstatement = null;
      
	  try {
		  
	    conn = DriverManager.getConnection("jdbc:postgresql://127.0.0.1:5432/db_test","mkyong", "password");
	    Class.forName("org.postgresql.Driver");
	    
	    pstatement = conn.prepareStatement("SELECT * FROM s_user where userid = ?");
	    
            System.out.println("Start: " + new Date());
        
        for (int i = 1; i < 100000; i++) {
            
            pstatement.setInt(1, i);
            rs = pstatement.executeQuery();
         
        }
        
           System.out.println("End: " + new Date());
	  
	  } catch (Exception e) {
	   
	    e.printStackTrace();
	    return;
	  }
  }
}

这是Statement类中Non Bind变量的源代码

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Date;

public class NonBindVariableJDBC {
  public static void main(String[] argv) {
  
      ResultSet rs = null;
      Connection conn = null;
      Statement statement = null;
      
	  try {
		  
	    conn = DriverManager.getConnection("jdbc:postgresql://127.0.0.1:5432/db_test","mkyong", "password");
	    Class.forName("org.postgresql.Driver");
	    
	    statement = conn.createStatement();
	    
            System.out.println("Start: " + new Date());
        
        for (int i = 1; i < 100000; i++) {

            rs = statement.executeQuery("SELECT * FROM s_user where userid = " + i);
         
        }
            System.out.println("End: " + new Date());
        
	  } catch (Exception e) {
	   
	    e.printStackTrace();
	    return;
	  }
  }
}

性能测试结果

循环1000次

绑定变量方法 非绑定变量方法
开始:2009年1月9日星期五14:09:41
结束:2009年1月9日星期五14:09:42
开始时间:2009年1月9日星期五14:15:08
结束:2009年1月9日星期五14:15:08
1秒 0秒

哇,经过1000次循环时间测试,结果令人惊讶,这表明非绑定变量方法比绑定变量方法要快一些 。 我做错什么了吗? 没关系…我只是在10000个循环时间内继续测试。

循环10000次

绑定变量方法 非绑定变量方法
开始时间:2009年1月9日星期五14:18:31
结束:2009年1月9日星期五14:18:35
开始时间:2009年1月9日星期五14:19:53
结束:2009年1月9日星期五14:19:59
4秒 6秒

10000次循环时间测试,结果表明与非绑定变量方法相比绑定变量方法更快,性能提高了50% 。 听起来很有趣,我只是在100000个循环时间内继续进行测试。

循环100000次

绑定变量方法 非绑定变量方法
开始时间:2009年1月9日星期五14:22:40
结束:2009年1月9日星期五14:23:17
开始时间:2009年1月9日星期五14:23:49
结束:2009年1月9日星期五14:24:46
37秒 57秒

100000次循环时间测试,结果表明与非绑定变量方法相比绑定变量方法更快,性能提高了35% 。 最后一次测试的循环时间为1000000。

循环1000000次

绑定变量方法 非绑定变量方法
开始时间:2009年1月9日星期五14:30:51
结束:2009年1月9日星期五14:37:08
开始:2009年1月9日星期五14:41:59
结束:2009年1月9日星期五14:51:58
6分17秒 9分钟59秒

1000000次循环时间测试,结果表明与非绑定变量方法相比绑定变量方法更快,性能提高了37%

结论

在轻型数据库访问应用程序中, 绑定变量非绑定变量之间的性能不是很明显。 但是,当应用程序涉及大量的数据库访问时,建议始终使用绑定变量方法将Java性能至少提高30%

翻译自: https://mkyong.com/java/bind-variables-performance-test-in-java/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值