Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

Сравнение внедренного и динамического SQL

Сравнение внедренного и динамического SQLСпрашивается, так что же более эффективно: внедренный или динамический SQL? Большинство источников информации (книги, веб-сайты и т. п.) отдает бесспорное предпочтение внедренному SQL, поскольку в нем четыре первых этапа обработки запроса выполняются при компиляции и запрос не требует дополнительной подготовки во время выполнения программы. Теоретически данный аргумент трудно оспаривать, однако на практике не все так просто. Ключ к пониманию данного вопроса лежит на этапе 3 процесса обработки запроса. Большинство современных СУБД имеют специальные встроенные компоненты, называемые Оптимизаторами, которые создают план выполнения каждой отдельной инструкции SQL, как правило, основываясь на информации системного каталога. Это значит, что план выполнения запроса, который оптимален сегодня, может оказаться далек от идеала через месяц, а тем более через год. Этот тезис особенно актуален в крупных базах данных с большим потоком инструкций DML — в них оптимальный план выполнения может изменяться в течение дней или даже часов. Проблема состоит в том, что план после компиляции уже жестко прошит в программе и для его изменения требуется повторная компиляция. За плохой план выполнения инструкций SQL придется расплачиваться дорогой ценой — иногда она может быть даже выше, чем постоянное повторение всех пяти этапов обработки запроса для каждой инструкции SQL.

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *