Seite 1 von 1

ADS tunen.

Verfasst: So, 01. Nov 2020 9:28
von Manfred
Hi,
wie ich bei einer anderen Aktion festellen mußte, kann ein veränderter Indexschlüssel enorme Geschwindigkeitszuwächse bringen. Das hat mich natürlich nachdenklich gemacht. Wie kann man denn beim ADS prüfen, oder testen, ob ein Indexschlüssel optimal ist, oder ob er verbessert werden kann?

Re: ADS tunen.

Verfasst: So, 01. Nov 2020 18:43
von Marcus Herz
- SQL kann kein Index, in welchem Felder mit + verknüpft sind.
- Bei ADT gibt es die Rawkey Inices, verknüpft mit ;
- man kann im ARC ein SQL analaysieren und den Ausführungsweg anzeigen lassen
- Bei DBF wahrscheinlich je Feld, das als Referenz gebraucht wird, eineen Index anlegen
- ich habe irgendwann mich drauf festgelegt, Index Schlüssel nur für die Referenzierung anzulegen, nicht mehr für Anzeige Sortierung.
- Ansonst : ausprobieren

Re: ADS tunen.

Verfasst: So, 01. Nov 2020 18:56
von Manfred
verstehe ich jetzt nicht. Ich habe den neuen Index mit + erweitert und danach ging es ab wie Schmitz Katze
index.PNG
index.PNG (55.04 KiB) 2854 mal betrachtet

Re: ADS tunen.

Verfasst: So, 01. Nov 2020 23:58
von UliTs
Manfred hat geschrieben: So, 01. Nov 2020 18:56 verstehe ich jetzt nicht. Ich habe den neuen Index mit + erweitert und danach ging es ab wie Schmitz Katze
Vermutlich kann der ADS dann doch auch mit "+" im Index klar kommen.
Du kannst aber auch alternativ als Test mal einzelne Indizes für die Felder KfzNr,Tankdatum,Tankzeit anlegen und prüfen, ob das auch schnell ist.

Prüfen kann man so etwas recht gut im Data Architekten (ARC). Da machst Du das SQL-Fenster auf, gibt z.B.

Code: Alles auswählen

select * from tankbuch
order by tankzeit
ein und rufst mit "Rechte Maustaste/show Plan" den Ausführungsplan auf. Das zeigt Dir an, ob der ADS das Statement vernünftig optimieren kann.

Da kann man sich übrigens bei aufwändigen SQL-Statements Tage mit beschäftigen 8) .

Re: ADS tunen.

Verfasst: Mo, 02. Nov 2020 9:13
von nightcrawler
Bei DBF geht ein Index mit '+', bei ADT nicht mehr. Der ADS beginnt von vorne und sucht die Felder solange es noch passt, zB o.a. Index auf

Code: Alles auswählen

str(kfznr,9,0)+dtos(tankdatum)+tankzeit
wird für die Optimierung folgender SQL sehr wohl verwendet:

Code: Alles auswählen

select * from tankbuch where kfznr=5;
select * from tankbuch where kfznr=5 and tankdatum='2020-10-30';
select * from tankbuch where tankdatum='2020-10-30' and kfznr=5;
select * from tankbuch where kfznr=5 and tankdatum='2020-10-30' and tankzeit='12:00';
nicht verwendet wird der Index, wenn die Felder von vorne her nicht passen (kfznr fehlt inder Abfrage):

Code: Alles auswählen

select * from tankbuch where tankdatum='2020-10-30';
select * from tankbuch where tankdatum='2020-10-30' and tankzeit='12:00';
select * from tankbuch where tankzeit='12:00';
Zum Teil verwendet, wenn dazwischen das Feld fehlt (Optimierung nur auf kfznr):

Code: Alles auswählen

select * from tankbuch where kfznr=5 and tankzeit='12:00';

Re: ADS tunen.

Verfasst: Mo, 02. Nov 2020 9:37
von Tom
Hat das wirklich was mit dem ADS zu tun? Binärbaumindexe sind einfach schneller, wenn die Ausprägungen eindeutiger werden. Wenn ich eine Tabelle z.B. mit Log-Einträgen zu Kunden habe, und zu jedem Kunden laufen täglich Dutzende solcher Log-Einträge auf, und ich indexe nur mit der Kundennummer, plätte ich den Binärbaum jeden Tag ein bisschen mehr - die Suche muss langsam sein, weil ich eine große Menge gleicher Treffer habe, die repräsentiert sein wollen. Wenn ich das Datum hinzunehme, verringere ich diese Menge deutlich und gebe dem Baum mehr Stabilität. Das Optimum würde ich in diesem Fall erreichen, wenn ich aus dem Datum eine Timestamp bis runter zum Sekundenwert machen würde. Dann hätte ich nur ein-eindeutige Einträge, nehme ich an, und damit die optimale Situation für diese Art von Repräsentation. Oder liege ich jetzt völlig falsch? <grübel>

Re: ADS tunen.

Verfasst: Mo, 02. Nov 2020 9:45
von Martin Altmann
Moin Tom,
Tom hat geschrieben: Mo, 02. Nov 2020 9:37 Oder liege ich jetzt völlig falsch? <grübel>
nein, Du liegst nicht unbedingt falsch.
Außer, dass breite Bäume auch nicht unbedingt optimal sind. Du willst ja eigentlich mit möglichst wenigen Schritten zum Ziel kommen :!:

Viele Grüße,
Martin