2014-08-27 2 views
0

Я пытаюсь подключиться к моей базе данных MySQL с помощью Java. Вот код:Запрос Java MySQL медленнее, чем ожидалось

Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD); 
java.sql.Statement stmt = connection.createStatement(); 
long startTime = System.currentTimeMillis(); 
stmt.execute("SELECT row_1, row_2, row_3, row_4 FROM dataset where row_5 is null and row_6 is null limit 100"); 
long endTime = System.currentTimeMillis(); 
System.out.println("That took " + (endTime - startTime) + " milliseconds"); 
ResultSet rs = stmt.getResultSet(); 
while (rs.next()) { 
    System.out.println(rs.getString("row_1")); 
} 
stmt.close(); 

В таблице 'Набор данных' 5 миллионов строк, и индексированный по первичной (row_1, row_2, row_3, row_4), а второй индекс (row_5 и row_6).

Uncached, этот запрос занимает 1,9 мс, используя SequelPro для Mac (программное обеспечение для управления базами данных). Однако, когда я запускаю код выше в Java, он занимает около 1800 мс (без кэша). Пожалуйста, дайте мне знать, если это просто Java, который работает медленно или есть что-то, что я могу сделать, чтобы оптимизировать запрос в Java, потому что он отлично работает с использованием SequelPro или с использованием других языков сценариев.

+1

Когда вы выполнили запрос в sequelPro, вы учитывали время соединения с БД, как в коде? – pedromarce

+0

Как вы измеряете время? –

+0

MySQL работает медленнее на Mac. Попробуйте сделать виртуальную машину с linux (centos, ubuntu) и установить на нее mysql. – Meiblorn

ответ

0

Вы выполняете это как единую единицу кода в основном методе как отдельную программу? Вы должны знать о «холодном» jvm, что может привести к сильному влиянию производительности при запуске. Аналогично, вы (я) не знаете об исходном коде java.sql.Statement.java. Мы не знаем, может ли быть ленивая инициализация членов в любое время при выполнении запроса. Вы выполняете некоторую обработку, прежде чем вы измеряете время, вы можете использовать другой запрос, чтобы предотвратить обналичивание.

Смежные вопросы