Содержание
- 1 Как мне это проверить?
- 2 Какие инструменты используются?
- 3 Вот исходный код для переменных Bind в классе PreparedStatement
- 4 Вот исходный код для переменных без привязки в классе Statement
- 5 Результат теста производительности
- 6 Цикл 1000 раз
- 7 Цикл 10000 раз
- 8 Цикл 100000 раз
- 9 Цикл 1000000 раз
- 10 Заключение
Я слышал, что многие люди, говорящие о « переменных связывания », повысят производительность 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 Второй |
Ничего себе, тестирование с 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% .
0.00 (0%) 0 votes




