AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Nachhilfe

Ein Thema von HCB · begonnen am 27. Jan 2024 · letzter Beitrag vom 1. Feb 2024
Antwort Antwort
Seite 2 von 2     12   
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: SQL Nachhilfe

  Alt 31. Jan 2024, 19:57
Hallo,
das Year-Dingens könnte man so umschreiben

DateAdd("yyyy", -5, Date())

Aber warum übergibst Du das nicht als konstanten Parameter?
Warum wird das jedesmal berechnet?

Und noch mal auf die Indizes zu kommen.
INNER JOIN ABFPos as P ON A.ABFDocId = P.ABFPosDocID )
inner join sPersKto as M on M.PersKtoNummer = A.ABFDocKundenNr
where P.ABFPosArtNr = '11024060' and Year([A.ABFDocDatum]) > Year(Date())-5 and A.ABFDocType = 1


Die fett markierten Felder müssten Indizes enthalten.

Ich würde danach auch mal die MDB komprimieren.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#12

AW: SQL Nachhilfe

  Alt 31. Jan 2024, 20:12
Das DateAdd("yyyy", -5, Date()) wird nur einmal berechnet. (außer die haben bei der Funktion und dem Queryplaner echt Scheiße gebaut)

Aber das Date vom Feld, wird natürlich für jeden Datensatz berechnet.
Ja, die Berechnung/Funktionsausführung dauert nicht lange und braucht nahezu keine Zeit,
aber da es keinen Index auf dessen Ergebnis gibt, kann eben auch Keiner genutzt werden.
$2B or not $2B
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#13

AW: SQL Nachhilfe

  Alt 31. Jan 2024, 22:17
Hallo,
kein Index?

CREATE INDEX idx_ABFDok_ABFPosArtNr_Datum_Type_KundenNr ON ABFDok (ABFPosArtNr, ABFDocDatum, ABFDocType, ABFDocKundenNr);


Eventuell sollte noch ein Index direkt auf ABFDocDatum gesetzt werden, also nicht so ein "komischer" Compound-Index.
Heiko

Geändert von hoika (31. Jan 2024 um 22:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#14

AW: SQL Nachhilfe

  Alt 1. Feb 2024, 13:16
idx_ABFDok_ABFPosArtNr_Datum_Type_KundenNr ist ein Combi-Index, der genutzt wird, wenn im WHERE direkt auf alle Felder (ABFPosArtNr, ABFDocDatum, ABFDocType, ABFDocKundenNr) gerpft wird.

Hast du einen Index nur auf "ABFDocDatum", also CREATE INDEX idx_ABFDocDatum ON ABFDok (ABFDocDatum); (oder z.B. ABFDocDatum UNIQUE im CREATE TABLE), dann
* wird bei WHERE ABFDocDatum ... dieser Index benutzt
* aber nicht bei WHERE Year(ABFDocDatum) ...

Für Letzteres bräuchte man z.B. sowas CREATE INDEX idx_YearABFDocDatum ON ABFDok (Year(ABFDocDatum)); (falls Access sowas kann)



Und wie gesagt, kommt es teilweise auch auch auf die Art des Indize drauf an.
MySQL oder z.B. Postgres kennen unterschiedliche Typen (z.B. B-tree, hash, GiST, SP-GiST, GIN, and BRIN)

B-Tree ist heute oft gebräuchlich und auch für ein LIKE 'irgendwas*' geeignet, während HASH für ein LIKE absolut unnütz ist, aber für ein = mit langen Strings super wäre.
Und für LIKE '*sonstwas' wäre es besser, wenn der B-Tree rückwärts von hinten aufgebaut ist.
$2B or not $2B

Geändert von himitsu ( 1. Feb 2024 um 13:29 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz