Я не знаком с PostgreSQL, поэтому могу дать вам только общий ответ.
Во-первых, если indexed_int_column
не является уникальным, второй оператор обновит несколько строк, тогда как первый будет обновлять только строку, находящуюся под курсором c_films
. Так что утверждения не идентичны.
Если предположить, что уникальность и курсор c_films находятся в одной строке, где indexed_int_column = 3000
, тогда обновление должно быть очень быстрым, когда курсор находится под определенной строкой, поскольку курсор содержит информацию для прямого доступа к физическому расположению этой строки , Второе утверждение, однако, должно будет сначала извлечь индекс, найти в нем значение 3000, и только тогда оно будет знать физическое местоположение строки, которую нужно обновить. Тем не менее, эта операция поиска должна была быть выполнена для курсора в одной точке (если мы не выполняли итерацию по всей таблице). Таким образом, использование курсора в целом оправдывает себя только тогда, когда вам сначала нужно прочитать данные, а затем обновить ту же строку, которую вы только что прочитали.