Top.Mail.Ru
Ответы

Оптимизация запроса 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 секунд. Хотелось бы доли.

По дате
По рейтингу
Аватар пользователя
Ученик
17лет

Используйте профайлер для SQL-сервера, что бы точно узнать, сколько времени затрачивается на выборку данных. Может статься, что вы пытаетесь оптимизировать одно, а причина общей задержки совсем в другом.

Аватар пользователя
Мастер
17лет

посидеть, подумать над структурой БД, поиграть с установкой индексов и ключевых полей...



Видео по теме