что хорошего, явный курсор в бэкэнде или цикл во внешнем интерфейсе? - PullRequest
0 голосов
/ 17 августа 2010

что хорошо, используя явный курсор, в то время как цикл на стороне базы данных ИЛИ используя цикл на внешнем интерфейсе (программа на стороне приложения) ???

Отредактировано: - Привет, если я хочу повторить, и я используюado.net асинхронное (отключенное) соединение (т. е. у меня есть таблица данных, и я подаю заявку на цикл в datatable во внешнем интерфейсе) - в этом случае, если я хочу повторить, что лучше на стороне БД ИЛИ стороне переднего конца ??

Ответы [ 4 ]

7 голосов
/ 17 августа 2010

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

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

Обновление: Относительно того, следует ли выполнять итерацию во внешнем интерфейсе, все зависит от того, что вы хотите сделать в цикле. Показать данные? Тогда, конечно, вы, вероятно, захотите перебрать интерфейс. Однако, если вы выполняете итерацию по данным, чтобы найти что-то еще в базе данных, выполнить вычисления и т. Д., Возможно, вам лучше сделать это на сервере БД. Нам нужно больше подробностей, чтобы давать подробные рекомендации, сейчас мы можем говорить только в общих чертах с предоставленной вами информацией.

0 голосов
/ 17 августа 2010

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

Прочтите эту статью, чтобы узнать, как лучше работать: http://wiki.lessthandot.com/index.php/Cursors_and_How_to_Avoid_Them

0 голосов
/ 17 августа 2010

Это зависит от вашего бизнеса.Если у вас огромная бизнес-логика, я бы посоветовал вам подать заявку.Производительность - старайтесь избегать петель в БД, используя предложения join.Если это не сработает, переходите к циклу while в конце базы данных.затем для цикла в приложении и затем курсоры.

0 голосов
/ 17 августа 2010

Лучшая вещь - это операция на основе множеств (например, JOIN или APPLY), выраженная в SQL.

Иногда, однако, это невозможно (из-за сложности алгоритмаили отсутствие поддержки диалекта SQL на стороне БД.)

В этом случае лучше обрабатывать результаты на стороне БД с помощью цикла процедурного языка БД.Это избавит вас от обходов между клиентом и сервером.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...