Рубрики
Без рубрики

Тест производительности привязки переменных в Java

– Тест производительности привязки переменных в Java

Я слышал, как многие люди говорили о том, что ” Привязка переменных ” повысит производительность java-приложений. Это действительно так? я скептически отношусь и провожу простой тест производительности между переменными Привязки в классе PreparedStatement и Переменные без привязки в классе операторов

Как мне это проверить?

Я создам простой класс java и продолжу отправлять SQL-запрос в методе привязки переменных и метод не привязки переменных к базе данных PostgreSQL. Класс java будет отображать время начала и окончания результата выполнения.

Какие инструменты используются?

1) База данных PostgreSQL 2) PostgreSQL Драйвер JDBC 3) Java JDBC Класс подготовленных утверждений и инструкций

Вот исходный код для переменных привязки в классе 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;
	  }
  }
}

Вот исходный код для переменных без привязки в классе операторов

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 раз

Метод привязки переменной Метод переменной без привязки
Начало: Пт 09 января 14:09:41 SGT 2009 Окончание: Пт 09 января 14:09:42 SGT 2009 Начало: Пт 09 января 14:15:08 SGT 2009 Конец: Пт Янв 09 14:15:08 СЕРЖАНТ 2009
1 Секунда 0 Второй

Вау, тестирование на 1000 циклов, результат меня удивляет, он показывает, что метод переменной без привязки немного быстрее, чем метод переменной привязки . Я сделал что-то не так? Все в порядке… я просто продолжаю свое тестирование на 10000 циклов.

Цикл 10000 раз

Метод привязки переменной Метод переменной без привязки
Начало: Пт 09 января 14:18:31 SGT 2009 Окончание: Пт 09 января 14:18:35 SGT 2009 Начало: Пт 09 января 14:19:53 SGT 2009 Конец: Пт Янв 09 14:19:59 СЕРЖАНТ 2009
4 Секунды 6 Секунд

Тестирование времени цикла 10000, результат показывает, что метод переменной привязки работает быстрее, а производительность на 50% увеличивается по сравнению с методом переменной без привязки . Звучит интересно, я просто продолжаю тестирование на 100000 циклов.

Цикл 100000 раз

Метод привязки переменной Метод переменной без привязки
Начало: Пт 09 января 14:22:40 SGT 2009 Конец: Пт Янв 09 14:23:17 СЕРЖАНТ 2009 Начало: Пт 09 января 14:23:49 SGT 2009 Окончание: Пт 09 января 14:24:46 SGT 2009
37 Секунд 57 Секунд

Тестирование времени цикла 100000, результат показывает, что метод переменной привязки работает быстрее и производительность увеличивается на 35% по сравнению с методом переменной без привязки . Одно последнее тестирование на время цикла 1000000.

Цикл 1000000 раз

Метод привязки переменной Метод переменной без привязки
Начало: Пт 09 января 14:30:51 SGT 2009 Окончание: Пт 09 января 14:37:08 SGT 2009 Начало: Пт 09 января 14:41:59 SGT 2009 Окончание: Пт 09 января 14:51:58 SGT 2009
6 минут 17 секунд 9 минут 59 секунд

Тестирование времени цикла 1000000, результат показывает, что метод переменной привязки работает быстрее и производительность увеличивается на 37% по сравнению с методом переменной без привязки .

Вывод

Производительность между переменной привязки и переменная без привязки не так очевидна в приложении light для доступа к базе данных. Однако, когда приложение требует интенсивного доступа к базе данных, всегда рекомендуется использовать метод переменной привязки, чтобы увеличить производительность java не менее чем на 30% .

Оригинал: “https://mkyong.com/java/bind-variables-performance-test-in-java/”