Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Скорость просмотра таблицы,Delphi  [new]
Medvedev_A
Member

Откуда:
Сообщений: 123
Есть база данных Microsoft SQL Server 2008, бесплатная версия. Таблица содержит 500 000 записей.
Нужно как можно быстрее пробежать из в цикле. Нужен именно цикл: получили данные i-ой строки, проиграли логику и т.п. по всем строчкам последовательно.
Я использую Delphi.
ADOQuery1.Open;
  ADOQuery1.First;
  while not ADOQuery1.Eof do
  begin
    // Логика
    ADOQuery1.Next;
  end;
  ADOQuery1.Close;

Получается довольно долго. Может как-то можно ускорить процесс прогона базы? может настройки какие сделать?
Спасибо за ответы.
26 май 12, 22:40    [12620637]     Ответить | Цитировать Сообщить модератору
 Re: Скорость просмотра таблицы,Delphi  [new]
londinium
Member

Откуда: Киев
Сообщений: 1199
автор
Нужен именно цикл: получили данные i-ой строки, проиграли логику и т.п. по всем строчкам последовательно.

А нельзя ли логику проиграть на сервере?
26 май 12, 22:42    [12620642]     Ответить | Цитировать Сообщить модератору
 Re: Скорость просмотра таблицы,Delphi  [new]
Medvedev_A
Member

Откуда:
Сообщений: 123
нет. Логика сложная и на TSQL ее навесить не получиться, если вы это имеете ввиду.
27 май 12, 14:28    [12621752]     Ответить | Цитировать Сообщить модератору
 Re: Скорость просмотра таблицы,Delphi  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Medvedev_A
нет. Логика сложная и на TSQL ее навесить не получиться, если вы это имеете ввиду.
Ну, или сложно и быстро на сервере, или долго на клиенте. Выбирайте.
27 май 12, 14:30    [12621754]     Ответить | Цитировать Сообщить модератору
 Re: Скорость просмотра таблицы,Delphi  [new]
Zelius
Member

Откуда: Россия, Москва
Сообщений: 1556
Medvedev_A,

Попробуй серверный однонаправленный курсор, он быстрее
27 май 12, 15:31    [12621850]     Ответить | Цитировать Сообщить модератору
 Re: Скорость просмотра таблицы,Delphi  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
Medvedev_A
Получается довольно долго. Может как-то можно ускорить процесс прогона базы? может настройки какие сделать?
Спасибо за ответы.
А что конкретно долго? Перебирание строк результата запроса или сама логика?

А то непонятно, к чему вопрос относится - к сиквелу или к оптимизации кода на дельфи.
27 май 12, 16:27    [12621936]     Ответить | Цитировать Сообщить модератору
 Re: Скорость просмотра таблицы,Delphi  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
alexeyvg
А то непонятно, к чему вопрос относится - к сиквелу или к оптимизации кода на дельфи.
А сиквел в данном сценарии при чем? Запрос select * from таблица не оптимизируется.
27 май 12, 16:30    [12621939]     Ответить | Цитировать Сообщить модератору
 Re: Скорость просмотра таблицы,Delphi  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
Гавриленко Сергей Алексеевич
alexeyvg
А то непонятно, к чему вопрос относится - к сиквелу или к оптимизации кода на дельфи.
А сиквел в данном сценарии при чем? Запрос select * from таблица не оптимизируется.
К сиквелу - это я прополучение данных от сиквела.
27 май 12, 19:36    [12622405]     Ответить | Цитировать Сообщить модератору
 Re: Скорость просмотра таблицы,Delphi  [new]
PVC
Member

Откуда:
Сообщений: 319
Medvedev_A,

Воспользуйтесь типом _Recordset из модуля ADOInt (в Дельфи).
28 май 12, 09:17    [12623807]     Ответить | Цитировать Сообщить модератору
 Re: Скорость просмотра таблицы,Delphi  [new]
Medvedev_A
Member

Откуда:
Сообщений: 123
PVC,
спасибо. Именно так и сделаю.
28 май 12, 09:41    [12623937]     Ответить | Цитировать Сообщить модератору
 Re: Скорость просмотра таблицы,Delphi  [new]
PVC
Member

Откуда:
Сообщений: 319
Medvedev_A,

procedure GetData(Connect: TADOConnection);
var Con, Rec: OleVariant; 
begin
  Con := Connect.ConnectionObject;
  Rec := Con.Execute('select * from table');
  While not Rec.EOF do
  begin
    .....
    Rec.MoveNext;
  end;
  Rec.Close;


проверки допишите сами
28 май 12, 10:26    [12624183]     Ответить | Цитировать Сообщить модератору
 Re: Скорость просмотра таблицы,Delphi  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
У сабжевой таблицы не должно быть датасорсов/контролов.

зы: пол-лимона сильно ускорить не получиться. Смена типа курсора рояля не сыграет.
28 май 12, 14:58    [12626185]     Ответить | Цитировать Сообщить модератору
 Re: Скорость просмотра таблицы,Delphi  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
LSV
У сабжевой таблицы не должно быть датасорсов/контролов.

зы: пол-лимона сильно ускорить не получиться. Смена типа курсора рояля не сыграет.


можно попробовать вместо построчного курсора устроить пейджинг, забирать пачками на клиента. пока клиент лопатит очередную порцию, запрашивать следующую.
28 май 12, 15:11    [12626288]     Ответить | Цитировать Сообщить модератору
 Re: Скорость просмотра таблицы,Delphi  [new]
Zelius
Member

Откуда: Россия, Москва
Сообщений: 1556
Попробуй такие настройки
object ADOQuery1: TADOQuery
  CursorLocation = clUseServer
  CursorType = ctOpenForwardOnly
end
28 май 12, 15:59    [12626730]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить