Вниз
Скачать: CL | DM;

Вопрос о 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
Дело в том, что там есть оптимизатор запросов.
На каждый запрос строится план его выполнения. Есть такое понятие - статистика. она влияет на то, какие индексы будет использовать сервер и как именно он построит план.
В случае с явным указаниме ограничений оптимизатор может вычислить более точную селективность индекса (т.к. известно значение ограничения) и построить более оптимальный план.
В случае, если ограничение накладывается переменной, оптимизатор оперирует средней селективностью (т.к. неизвестно, какое значение примет та или иная переменная).
Однако, хранимые процедуры все же более выгодны по сравнению с динамическими запросами, потому что компиляция запроса и построение плана тоже занимают время. В некоторых случаях оптимизатор может полностью отказаться от оптимизации запроса и выполнять его "В лоб" (тогда, когда решит, что оптимизация запроса займет больше времени, чем просто тупо выбрать)



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.012 c
14-70026
Esa
2002-03-18 13:40
2002.04.22
AccessViolation


1-69892
hooky-mars
2002-04-06 19:28
2002.04.22
TShockwaveFlash


3-69692
Sirus
2002-03-30 11:02
2002.04.22
Hello кул программеры... тут проблемка с DCOM


14-70007
lipskiy
2002-03-16 17:07
2002.04.22
Как это правильно перевисти и что это значит?


1-69848
Malder
2002-04-08 18:22
2002.04.22
Как создать переменную типа TSaveDialog ?




   Наверх