Что не так с курсорами?

Не можете ли вы создать политику безопасности контента (CSP) и заблокировать встроенный javascript и разрешить только javascript из определенных доменов? Вы даже можете создать CSP в режиме только для отчетов и собирать отчеты о нарушениях через что-то вроде https://report-uri.io/

13
задан Tshepang 25 March 2014 в 18:17
поделиться

6 ответов

Что плохо с курсорами, так это то, что ими часто злоупотребляют как в Oracle , так и в MS SQL .

Курсор предназначен для сохранения стабильного набора результатов, который можно извлекать построчно. Они неявно создаются, когда ваш запрос выполняется, и закрываются, когда он завершается.

Конечно, для сохранения такого набора результатов требуются некоторые ресурсы: locks , защелки , память , даже дискового пространства .

Чем быстрее освобождаются эти ресурсы, тем лучше.

Держать курсор открытым - это как держать дверь холодильника открытой

Вы не делаете это для часы без необходимости, но это не значит, что вы никогда не должны открывать свой холодильник.

Это означает, что:

  • Вы не получаете свои результаты построчно и суммируете их:
22
ответ дан 1 December 2019 в 18:49
поделиться

Из MSDN: реализации курсора

Использование курсора менее эффективно, чем используя набор результатов по умолчанию. В результат по умолчанию установить единственный пакет отправлено с клиента на сервер пакет, содержащий заявление для выполнить. При использовании серверного курсора, каждый оператор FETCH должен быть отправлен с клиент серверу, где он должны быть проанализированы и собраны в план выполнения.

Если инструкция Transact-SQL будет вернуть сравнительно небольшой набор результатов которые могут быть кэшированы в памяти доступно клиентскому приложению, и вы знаете, прежде чем выполнить заявление о том, что вы должны получить весь набор результатов, используйте значение по умолчанию набор результатов. Использовать только серверные курсоры когда операции курсора требуются для поддерживать функциональность приложение, или когда только часть Набор результатов, вероятно, будет получен.

Я не администратор баз данных Oracle, поэтому я не могу говорить о том, чем отличаются реализации. Однако с точки зрения программирования операции на основе множества почти всегда быстрее, чем обработка результатов в курсоре.

14
ответ дан 1 December 2019 в 18:49
поделиться

Мне всегда говорили, что курсоры злые, но всегда гуру MS SQL Server из-за плохой производительности. Относительно Oracle PL / SQL я нашел следующее высказывание, когда использовать курсоры :

Если не использовать курсоры, это приводит к повторным анализам. Если переменные связывания не используются, то выполняется жесткий анализ всех операторов SQL. Это на порядок влияет на производительность, и это абсолютно не масштабируемо. Используйте курсоры с переменными связывания, которые открывают курсор и выполняют его много раз. С подозрением относитесь к приложениям, генерирующим динамический SQL.

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

Помните, что Реализация Oracle ближе к Postgres, чем к Sybase (Genesis of MS SQL Server), поэтому производительность будет отличаться для каждого в разных задачах. Если вы можете, избегайте суеты производительности для систем, которые могут менять способные бэкэнды, идите для наименьшего общего знаменателя, если вам нужно работать с обоими. / Tangential_topic

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

Помните, что реализация Oracle ближе к Postgres, чем к Sybase (Genesis of MS SQL Server), так что производительность будет отличаться для каждого в разных задачах. Если вы можете, избегайте суеты для повышения производительности в системах, которые могут менять способные серверные части, используйте наименьший общий знаменатель, если вам нужно работать с обоими. / Tangential_topic

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

Помните, что реализация Oracle ближе к Postgres, чем к Sybase (Genesis of MS SQL Server), так что производительность будет отличаться для каждого в разных задачах. Если вы можете, избегайте суеты для повышения производительности в системах, которые могут менять способные серверные части, используйте наименьший общий знаменатель, если вам нужно работать с обоими. / Tangential_topic

Избегайте суеты для повышения производительности в системах, которые могут менять способные серверные части, используйте наименьший общий знаменатель, если вам нужно работать с обоими. / Tangential_topic

Избегайте суеты для повышения производительности в системах, которые могут менять способные серверные части, используйте наименьший общий знаменатель, если вам нужно работать с обоими. / Tangential_topic

3
ответ дан 1 December 2019 в 18:49
поделиться

Я уверен, что кто-то может объяснить более подробно, но это в основном сводится к тому, что курсоры в SQL-сервере МЕДЛЕННЫ.

1
ответ дан 1 December 2019 в 18:49
поделиться

Другие ответы правильно указывают на проблемы производительности с курсорами, но они не упоминают, что SQL и реляционные базы данных Лучше всего для операций на основе множеств и курсоры в основном для итерационных операций. Есть некоторые операции (в более широком смысле), которые проще выполнять с помощью курсоров, но при работе с SQL вы всегда должны думать о работе с наборами данных. Курсоры часто неправильно используются, потому что кодер не понимает, как выполнить задачу, используя операции на основе множеств.

0
ответ дан 1 December 2019 в 18:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: