Форум: "Базы";
Поиск по всему сайту: 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.04 c
14-70013          hooky-mars            2002-03-13 12:41  2002.04.22  
Проверка


1-69838           DeMoN-777             2002-04-11 04:14  2002.04.22  
ListBox


1-69807           NiaSoft               2002-04-08 22:49  2002.04.22  
Как получить снимок с экрана, включая режим Direct и т.п.


6-69945           otari                 2002-02-09 22:48  2002.04.22  
Это очен интересно !!!


1-69882           koks                  2002-04-05 15:26  2002.04.22  
Подскажите, где можно найти хорошие коллекции битмапов...