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

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

468
0

Я слышал, что многие люди, говорящие о « переменных связывания », повысят производительность Java-приложений. Это правда? Я скептически отношусь и делаю простой тест производительности между переменными Bind в классе PreparedStatement и переменными Non Bind в классе Statement

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

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

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

1) База данных PostgreSQL
2) Драйвер JDBC PostgreSQL
3) Java JDBC PrepareStatement и класс Statement

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


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 SGT 2009
1 секунда 0 Второй
ЧИТАТЬ ТАКЖЕ:  Git pull - отказ от слияния несвязанных историй

Ничего себе, тестирование с 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 SGT 2009
4 секунды 6 секунд

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

Цикл 100000 раз

Метод переменной связывания Метод без привязки переменной
Начало: пт, 09 января 14:22:40 SGT 2009
Конец: Пт. Янв 09 14:23:17 SGT 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% увеличилась по сравнению с методом без связывания с переменной .

Заключение

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

Java JDBC

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

0.00 (0%) 0 votes

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь