В Delphi я должен использовать несколько вставок базы данных из цикла или использовать хранимую процедуру? - PullRequest
5 голосов
/ 05 сентября 2011

Я ищу лучший способ справиться с этой ситуацией. Я хочу хранить график амортизации в таблице базы данных. В каждой строке указывается дата, текущий баланс, оплата, цены, проценты и новый баланс. Для обычной 30-летней ипотеки это будет 360 строк или вставок базы данных.

Должен ли я выполнять вычисления внутри цикла с использованием Delphi и выполнять вставку для каждого результата, или мне следует выполнять эти вычисления внутри хранимой процедуры?

Это будет один пользователь, локальный компьютер, настольное приложение.

Ответы [ 4 ]

8 голосов
/ 05 сентября 2011

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

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

5 голосов
/ 05 сентября 2011

Я бы сделал операции в хранимой процедуре. Таким образом, работа с данными находится в базе данных, которой они принадлежат.

Кроме того, сохраняя все связанные с данными операции в базе данных, вы избавляете себя от необходимости кодировать их снова, если когда-нибудь в будущем вы решите сменить язык.

2 голосов
/ 05 сентября 2011

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

См. Очень высокая производительность с использованием массива DML

0 голосов
/ 05 сентября 2011

Если ваша база данных является локальной и вы не планируете сделать ее клиент / сервер однажды, с точки зрения производительности разница может быть небольшой.Многое зависит от того, какую базу данных вы используете.Некоторые из них имеют «массив DML», который позволит вам выполнить все 360 вставок в одном цикле обработки базы данных, в основном вместо 360 вставок вы заполняете переменные связывания массива и выполняете одну вставку.В любом случае худшим способом будет использование n вставок без переменных связывания.Скомпилированный и оптимизированный код Delphi может быть несколько быстрее, чем интерпретированный код хранимой процедуры, если база данных не компилирует его (некоторые могут просто использовать P-код).С точки зрения дизайна, размещение логики данных внутри БД, публикующей своего рода API с помощью хранимых процедур (может запрещать другие способы изменения данных), может обеспечить более строгий контроль над данными.

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