Несколько дней назад мне пришлось создать некоторые тесты производительности производительности, используя инфраструктуру вычислений в памяти. Поэтому для этого мне понадобился большой пул данных, который был увеличен постепенно с учетом различных тестов производительности.Почему PreparedStatement намного быстрее, чем заявление?
БД была Oracle, содержащая таблицу из 22 полей. Эта таблица должна была заполняться постепенно с 1 млн записей до 100 млн записей.
Для заполнения таблицы 1 мил, я сгенерировал случайные данные теста и использовал заявление Java, чтобы вставить его в БД, и это заняло около 17 и 16 секунд минут. После этого я быстро понял, что для заполнения таблицы столов на 100 миллионов займет время, поэтому я попробовал ее с PreparedStatement, потому что я знал, что это немного быстрее ... но разница была такой огромной: 1 минута и 24 секунды, что у меня есть начал искать в Интернете причину этого и выяснил некоторые причины, но ничего, что, на мой взгляд, должно иметь такое влияние.
это то, что я обнаружил, что могло бы объяснить эту разницу: LINK
PreparedStatement получает предварительно скомпилированный В базе данных и там план доступа также кэшируются в базе данных, которая позволяет базы данных выполнить параметрический запрос, написанные с использованием подготовленного оператора гораздо быстрее, чем обычный запрос, потому что у него меньше работы. Вы всегда должны пытаться использовать PreparedStatement в коде JDBC для уменьшения нагрузки на базу данных. Чтобы получить выгоду от производительности, стоит отметить использование только параметризованной версии SQL-запроса, а не конкатенации строк.
BUT все данные были сгенерированы случайным образом, поэтому не требуется существенное кэширование со стороны оракулов.
Читайте о жестком и мягком разборе Oracle и SGA. Существует много циклов обработки, используемых для неподготовленной/литеральной версии вставки для жесткого разбора. – OldProgrammer
Я рекомендую вам проследить программу до и после внесения таких изменений. Убедитесь, что тест справедлив. Затем профилируйте полученные файлы трассировки. Результаты часто удивляют. – jeff6times7