Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];




Вниз

Вопрос о TQuery с параметрами. 


Solod   (2002-03-13 07:31) [0]

Почему TQuery с параметрами выполняется на много медленнее
чем тот же запрос, но реализованный без параметров?



Корвин   (2002-03-13 08:33) [1]

Какая БД?



sniknik   (2002-03-13 08:33) [2]

Уверен?
запросы
Query1.SQL.Add("SELECT Sum(TotalRub) as TotRub FROM "Cheks.Dbf" WHERE SDate=:TekDate AND Operation IN (:I1, :I2)")
Query1.Parameters.ParamByName("TekDate").DataType:= ftDate;
....
и
Query1.SQL.Add("SELECT Sum(TotalRub) as TotRub FROM "Cheks.Dbf" WHERE SDate=03.12.2001 AND Operation IN (2, 7)")
равнозначны по времени выполнения (должны быть)

а вот запрос без условия
SELECT Sum(TotalRub) as TotRub FROM "Cheks.Dbf"
выполнится быстрее особенно если условие "WHERE" накладывается на неиндексированные поля.
а вообще положил бы куски кода для сравнения.



data   (2002-03-13 10:30) [3]

согласна со sniknik © (13.03.02 08:33)
Если условия в where одинаковые, то скорость должна быть одинаковой.
Кстати, для ускорения, можно сделать запросу Prepare, а потом только значения параметров менять.



Lord Warlock   (2002-03-14 15:39) [4]

dbf конечно работает быстро, тк используется только БДЕ
а попробуй то же в ACCESS или Sql SERVER, сразу разница
появится. data права, нужно предварительно компилировать
запросы, а в случае сервера БД сложные запросы вообще переложить на него в виде хранимых процедур, триггеров(чем их меньше, тем лучше и толще :), генераторов, смотря что он делает



djtsov   (2002-03-24 21:55) [5]

Solod верно говорит: я пробовал на MSSQL 2000 - запрос с параметрами выполняется раза в три дольше чем тот же запрос без параметров (Prepare не поможет - как мертвому припарка). Могу посоветовать писать запросы без параметров, напрямую в св-во TQuery.SQL.Text. Удачи..



Locky   (2002-03-30 10:39) [6]

По поводу MS SQL
Дело в том, что там есть оптимизатор запросов.
На каждый запрос строится план его выполнения. Есть такое понятие - статистика. она влияет на то, какие индексы будет использовать сервер и как именно он построит план.
В случае с явным указаниме ограничений оптимизатор может вычислить более точную селективность индекса (т.к. известно значение ограничения) и построить более оптимальный план.
В случае, если ограничение накладывается переменной, оптимизатор оперирует средней селективностью (т.к. неизвестно, какое значение примет та или иная переменная).
Однако, хранимые процедуры все же более выгодны по сравнению с динамическими запросами, потому что компиляция запроса и построение плана тоже занимают время. В некоторых случаях оптимизатор может полностью отказаться от оптимизации запроса и выполнять его "В лоб" (тогда, когда решит, что оптимизация запроса займет больше времени, чем просто тупо выбрать)




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.055 c
14-70015          Zool                  2002-03-16 23:30  2002.04.22  
Файл


1-69828           kserg@ukr.net         2002-04-10 17:12  2002.04.22  
Можно ли в Паскале создавать макроподстановки?


1-69928           Dimaiv                2002-04-09 20:39  2002.04.22  
Что делает процедура ProcessFile


4-70072           Demn                  2002-02-17 09:44  2002.04.22  
Как перезагрузить чужую рабочую станцию?


1-69875           Rammst                2002-04-09 06:38  2002.04.22  
Размер файла