Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Разница вызова запроса [D7]


Страницы:   1 2

alsov ©   (2007-08-17 17:05:00) 

Приветствую, Мастера

Скажите пожалуйста в чем разница вызова запросов с точки зрения производительности Oracle :


qry:=TADOQuery.Create(Self);
qry.sql.add('select name, surname from user where user_id=123);
qry.Open;


И второй вариант вызов через параметр


qry:=TADOQuery.Create(Self);
qry.sql.add('select name, surname from user where user_id=:id);
qry.ParamByName('id').value := 123;
qry.Open;


Заранее благоданет за ответы


Anatoly Podgoretsky   (2007-08-20 15:28:00) [21]

Точнее он написал, как нехорошо их не использовать, а также почему нельзя писать SELECT *


Игорь Шевченко   (2007-08-20 14:06:00) [22]

Дядька Кайт аж три книжки написал про то, как хорошо и правильно использовать параметры в запросах...


Desdechado   (2007-08-19 17:16:00) [23]

Petr V. Abramov ©   (18.08.07 13:19) [4]
Не на худшее, а на среднее. А механизм "подглядывания" значения в более позних версиях может быть и хуже, т.к. хороший план для "подглянутого" нетипичного значения может быть ужасным для всех последующих типичных.


Petr V. Abramov   (2007-08-18 13:19:00) [24]

> Desdechado ©   (17.08.07 17:13) [2]
> Параметрический запрос хорош в этом случае тем, что он подходит для любых значений параметров такого же запроса
подходит-то он подходит, но только по тексту, а кешируется еще и план.
А вот план для другого значения параметра может оказаться совсем неоптимальным.
К тому в версиях до 9-ки даже при первом построении плана оптимизатор НЕ ЗНАЕТ значение параметра и строит план исходя "с расчетом не худшее".

Но это не значит, что я ОТГОВАРИВАЮ использовать параметры, наоборот, использовать их чаще всего ХОРОШО.


alsov   (2007-08-17 17:16:00) [25]

Спасибо

Все ясно


stanislav   (2007-08-17 17:13:00) [26]

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


Desdechado   (2007-08-17 17:13:00) [27]

Вот из моей статьи выдержка:
2.1.Использование параметрических запросов
Использование параметров в запросах является правилом хорошего тона в программировании, поскольку имеет множество положительных аспектов:
Улучшается читаемость и облегчается сопровождение кода программ.
При циклических выполнениях запроса с разными значениями параметров есть возможность «подготовить» запрос на сервере один раз, после чего он выполняется быстрее без необходимости «подготовки» на каждой итерации.
Исчезают ошибки, связанные с наличием апострофов, кавычек и неожиданных форматов даты внутри заданных пользователем текстовых строк в конструируемых «на лету» запросах.
Запросы, «подготовленные» сервером, хранятся некоторое время в кэше. Параметрический запрос хорош в этом случае тем, что он подходит для любых значений параметров такого же запроса, тогда как непараметрический – только для точно такого же, включая заданные в его теле (а не в параметрах) значения. Поэтому при совпадении «подготовка» не проводится, что для параметрического запроса это случается гораздо чаще, чем для непараметрического.
Непараметрические запросы тоже попадают в кэш, «выбивая» оттуда давно неиспользованные запросы (любого вида). Однако при большом потоке разнообразных запросов выбиваются и параметрические, которые имели шанс быть использованными далее, и заменяются непараметрическими, которые таких шансов не имеют. Это отрицательно сказывается на производительности сервера, т. к. ему приходится заново подготавливать параметрические запросы, уже «выбитые» из кэша.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо