Производительность на обновлениях с использованием курсора в PostgreSQL

StackOverflow https://stackoverflow.com/questions/4764214

Вопрос

Я хотел бы знать разницу в производительности в обновлении таблицы, используя следующий метод:

UPDATE films SET kind = 'Dramatic' WHERE CURRENT OF c_films;

или как это:

UPDATE films SET kind = 'Dramatic' WHERE unique_indexed_int_column = 3000;

Кто -нибудь проверял это или знает, как работают обновления, использующие курсоры, чтобы они могли прокомментировать это?

РЕДАКТИРОВАТЬ: Я теперь оценил это и обнаружил, что это фактически примерно на треть быстрее, чтобы сделать последний пример. Я запустил каждый из запросов 100000 раз и рассчитывал разницу. Я использовал psycopg2, используя курсоры на стороне сервера для связи с Postgres. Я буду исследовать далее, чтобы узнать, могу ли я найти, что это не всегда так.

Это было полезно?

Решение

Я не знаком с PostgreSQL, поэтому я могу дать вам только общий ответ.

Во -первых, если indexed_int_column не уникален, второй оператор будет обновлять несколько строк, тогда как первый будет обновлять строку в настоящее время под курсором c_films. Анкет Таким образом, утверждения не идентичны.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top