有一主表,一个从表,
主表teacher表,有id,name,sex,age四个字段
从表student表,有id,name,sex,age,teachername四个字段,并且对teachername字段建立了索引
代码如下:
qryMaster.Sql.Text := 'select id, name, sex, age from teacher where age>30';
qryMaster.Open;
MasterSource.DataSet := qryMaster;// 从表用来获得当前老师的所有学生
tblDetail.TableName := 'student';
tblDetail.MasterSource := MasterSource;
tblDetail.MasterFields := 'name';
tblDetail.IndexFieldNames := 'teachername';
tblDetail.Open;for I := 0 to qryMaster.RecordCount - 1 do
begin
...// 输出老师信息 for J := 0 to tblDetail.RecordCount - 1 do
begin
... // 输出从表的当前记录
tblDetail.Next;
end;
qryMaster.Next;
end;经过测试,发现性能难以让人满意,当teacher表和student表都有10万条记录时,处理竟然要20分钟。
有没有办法能够提高性能?
主表teacher表,有id,name,sex,age四个字段
从表student表,有id,name,sex,age,teachername四个字段,并且对teachername字段建立了索引
代码如下:
qryMaster.Sql.Text := 'select id, name, sex, age from teacher where age>30';
qryMaster.Open;
MasterSource.DataSet := qryMaster;// 从表用来获得当前老师的所有学生
tblDetail.TableName := 'student';
tblDetail.MasterSource := MasterSource;
tblDetail.MasterFields := 'name';
tblDetail.IndexFieldNames := 'teachername';
tblDetail.Open;for I := 0 to qryMaster.RecordCount - 1 do
begin
...// 输出老师信息 for J := 0 to tblDetail.RecordCount - 1 do
begin
... // 输出从表的当前记录
tblDetail.Next;
end;
qryMaster.Next;
end;经过测试,发现性能难以让人满意,当teacher表和student表都有10万条记录时,处理竟然要20分钟。
有没有办法能够提高性能?
begin
...// 输出老师信息 for J := 0 to tblDetail.RecordCount - 1 do
begin
... // 输出从表的当前记录
tblDetail.Next;
end;
qryMaster.Next;
end;不知道为什么要这样遍例, 可是10万*10万. 当然费时间了.
说说目的,最好从根源上解决问题.
*
from
teacher t,
student s
where
t.name=s.teachername
order by
t.ID,s.ID