有一主表,一个从表,
主表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分钟。
有没有办法能够提高性能?

解决方案 »

  1.   

    for I := 0 to qryMaster.RecordCount - 1 do
    begin
      ...// 输出老师信息  for J := 0 to tblDetail.RecordCount - 1 do
      begin
        ... // 输出从表的当前记录
        tblDetail.Next;
      end;
      qryMaster.Next;
    end;不知道为什么要这样遍例, 可是10万*10万. 当然费时间了.
    说说目的,最好从根源上解决问题.
      

  2.   

    1、数据结构设计不合理,既然在teacher表里有ID字段,那么与student表可以通过teacher表的ID字段关联而非name与teachername关联2、为什么要用两个循环嵌套而不用表连接来解决这个问题?用表连接一个足以:select
        *
    from
        teacher t,
        student s
    where
        t.name=s.teachername
    order by
        t.ID,s.ID