Einzelnen Beitrag anzeigen

stalkingwolf

Registriert seit: 6. Mai 2011
518 Beiträge
 
#9

AW: Performanceproblem parambyname und sql like

  Alt 10. Okt 2013, 11:50
starting with liegt auch bei 0.2s.

Wie schon oben geschrieben, das Problem liegt in der Kombination like und parambyname.
Und natürlich ist ein Index auf dem Such-, wie auch auf dem Sortierfeld. Dennoch dürfte die Kombination like+parambyname nicht so extrem aus der Reihe fallen.

Und mich würde interessieren warum dem so ist.

Ich habe ein kleines Test mit einer 7 Millionen Datensatztabelle gemacht.
Nun also ohne irgendwelche externen Zugriffe über andere andere Tools/Schnittstellen.

Delphi-Quellcode:
procedure Tfmain.Button1Click(Sender: TObject);
var q : TIBQuery;
    t : integer;
begin
    db.DatabaseName:=eddatabasename.Text;
    try
        db.Connected:=TRUE;
    except
        on e : exception do begin
            messagedlg(e.Message,mterror,[mbok],0);
            exit;
        end;
    end;
    q := TIBQuery.create(nil);
    try
        q.unidirectional:=TRUE;
        q.Database := db;
        for t := 1 to 3 do begin
            q.sql.text := '';
            q.sql.add('select * from PROTOKOLL where ');
            if t = 1 then q.sql.add('KEY like '''+edsuche.text+'%''');
            if t = 2 then q.sql.add('KEY starting with :KEY ');
            if t = 3 then q.sql.add('KEY like :KEY ');
            q.sql.Add(' order by SNR desc');
            if t = 2 then q.ParamByName('KEY').AsString := edsuche.text;
            if t = 3 then q.ParamByName('KEY').AsString := edsuche.text+'%';

            memo1.lines.add(format('Test %d : Davor : %s',[t,formatdatetime('hh:nn:ss:zzz',now)]));
            q.open;
            memo1.lines.add(format('Test %d : Danach : %s',[t,formatdatetime('hh:nn:ss:zzz',now)]));
            q.close;
        end;
    finally
        q.free;
    end;
    db.Connected:=FALSE;
end;
Davon das Ergebnis
Test 1 : Davor : 12:44:42:138
Test 1 : Danach : 12:44:42:185

Test 2 : Davor : 12:44:42:192
Test 2 : Danach : 12:44:42:195

Test 3 : Davor : 12:44:42:196
Test 3 : Danach : 12:44:54:066
  Mit Zitat antworten Zitat