Я использую сервер базы данных Advantage от Sybase и на данный момент имею красивый быстрый запрос на левое соединение, который выполняется очень быстро. Проблема в том, что после выполнения запроса я хотел бы поместить результаты в строку. Я получил набор данных из 55000 записей. Теперь это занимает до 16 сек.положить его в строку. Для выполнения моего запроса потребовалось всего 8 мс. Моя первая попытка была такой:
aADSQuery.Open
aADSQuery.First
WHILE not aADSQuery.eof do
begin
s := s + aADSQuery.FieldbyName('Name').asString+',';
aADSQuery.Next;
end;
После я попробовал это, чтобы избежать aADSQuery.next, но aADSQuery.RecordCount взял мне 9 сек.
aADSQuery.Open
aADSQuery.First
Count := aADSQuery.RecordCount;
for i:=0 to count-1 do
begin
aADSQuery.RecNo := i;
aADSQuery.FieldbyName('Name').AsString;
end;
База данных проиндексирована с первичным ключом для идентификатора записи и индексируется для других столбцов. Я подумал о создании представления для подсчета моих записей, чтобы избежать количества записей, которое могло бы делать то же самое, что и количество sql. Но подсчет записей из представления занял то же время, что и раньше. Если я использую sql рассчитывать на мою базовую таблицу с 130000 записями, это занимает всего 200 мс. Но если я подсчитываю свою результирующую таблицу без использования представления, это занимает у меня 9 секунд. Я полагаю, что это так, потому что для новой временной таблицы результатов нет индексов. Кто-нибудь знает, как решить эту проблему должным образом или как получить более быстрый подсчет результатов?
Большое спасибо