Оптимизация запроса SQL
Клиент и сервер на разных машинах, запрос на 2000 записей длится 5секунд. По-моему, это очень много.
Запрос заканчивается на ORDER BY Date1 DESC, Date2 DESC, создал новый кластерный индекс с таким порядком. Не помогло. Куда копать?
MS SQL Server 2000.
Запросы сейчас посылаю из Delphi, выглядит так:
Connection.ConnectionString := FConnectionString;
Connection.CursorLocation := clUseServer;
...
Query.Connection := Connection;
Query.LockType := ltReadOnly;
Query.CursorType := ctOpenForwardOnly;
Query.SQL.Text := 'SELECT ...';
Query.Prepared := True;
Так инициализируется каждый поток в thread pool, потом, когда приходят собственно запросы, в Query подставляются только параметры:
Query.Close;
with Query.Parameters do
begin
ParamByName('...').Value := ...;
...
end;
StartTime := Now;
Query.Open;
while not Query.Eof do
begin
with Query.Fields do
begin
Q_Result.Add(FieldByName('...').AsString + ':');
...
end;
Query.Next;
end;
Query.Close;
...замер времени: FloatToStr((Now - StartTime) * 24 * 3600)
...т. е. без учёта расходов на синхронизацию
Ничто не предвещает беды, и тем не менее 5 секунд. Хотелось бы доли.
Используйте профайлер для SQL-сервера, что бы точно узнать, сколько времени затрачивается на выборку данных. Может статься, что вы пытаетесь оптимизировать одно, а причина общей задержки совсем в другом.
посидеть, подумать над структурой БД, поиграть с установкой индексов и ключевых полей...