我正在使用Sybase的Advantage Database Server,目前还有一个很快的快速连接查询,运行速度非常快.问题是在运行查询后我想将结果放入一个字符串中.我检索了55000个条目的数据集.现在最多需要16秒.将它放入字符串中.我的查询只花了8毫秒才能运行.我的第一个尝试是这样的:
aADSQuery.Open
aADSQuery.First
WHILE not aADSQuery.eof do
begin
s := s + aADSQuery.FieldbyName('Name').asString+',';
aADSQuery.Next;
end;
Run Code Online (Sandbox Code Playgroud)
之后,我试着避免使用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;
Run Code Online (Sandbox Code Playgroud)
数据库已编制索引,条目ID为主键,其他列为indizes.我考虑创建一个视图来计算我的条目以避免记录计数,这可能与sql计数完全相同.但是视图中的条目计数与之前的时间相同.如果我在基表上使用带有130000个条目的sql计数,则只需要200 ms.但是,如果我对结果表进行计数,而不使用视图则需要9秒.我觉得它是,因为没有新的临时结果表的indizes.有谁知道如何以正确的方式处理这类问题或如何获得更快的结果计数?
非常感谢你
我现在正在搜索Advantage Database Server中的一种可能性,通过sql将字节流,所谓的blob文件放入表中.当我建立一个完整的数据库时,我这样做:
TBlobField(BaseTable.FieldByName('BlobData')).LoadFromStream(BinaryStream);
Run Code Online (Sandbox Code Playgroud)
现在我想在我的数据库中添加一个Entry,其中一个Field有'BlobData'.我开始是这样的:
FADSQuery.SQL.Add('Insert Into '+DBName'+'(BlobData)');
TBlobField(FADSQuery.ParamByName('BlobData')).LoadFromStream(BinaryStream);
Run Code Online (Sandbox Code Playgroud)
但是编译器告诉我它找不到该BlobData字段.:(这样做几乎是正确的吗?我不想把插入语句中的整个文件插入到语句中.
先感谢您