![]() |
AW: SQL optimimieren notwendig Max()
Zitat:
Prepare time = 0ms Execute time = 6s 657ms Avg fetch time = 6.657,00 ms Current memory = 18.323.720 Max memory = 147.452.584 Memory buffers = 2.048 Reads from disk to cache = 90.199 Writes from cache to disk = 0 Fetches from cache = 90.277 |
AW: SQL optimimieren notwendig Max()
In einem "normalen" Index steht drin , was es zu wechem Datensatz gibt.
Du suchst aber nach "nicht da". > ich suche ABC und bekomme als Ergebnis alle Datensatzzeiger direkt aus dem einen Index-Eintrag > im Index steht aber keine Liste aller nichtzutreffenden Datensätze Klar könnte man denken, dass man nun einfach danach sucht und wenn mein Datensatz nicht im Ergebnis vorkommt, dann nehme ich den, aber dafür muß man ja dennoch erstmal alles durchsuchen ... da denkt sich die Datenbbank wohl: Wenn ich sowieso alles laden muß, dann ignoriere ich einfach den Index. In vielen DBMS gibt es verschiedene Arten von Indize. Eventuell funktioniert es mit einer anderen Art besser? Oder einfach selber Mal versuchen umzudrehen und der DB ein "suche nach" unterjubeln? Also in einem JOIN/SubSELECT nach
SQL-Code:
suchen und dann via
WHERE kennung IN ('klein', ' ')
SQL-Code:
oder
IS NOT NULL
SQL-Code:
mit dem eigentlichen SELECT verknubbeln.
NOT Exists(...)
|
AW: SQL optimimieren notwendig Max()
Dann mal ein anderer Ansatz (Abfrage ist ungeprüft eingetippt):
Code:
Damit sollte die DB keine Möglichkeit mehr haben, den Index der ersten Abfrage zu umgehen. Der Rest ist dann aber ein Full-Table-Scan auf das Ergebnis der ersten Abfrage. Bei 29 Datensätzen sollte das aber kein Problem sein.
with q1 as
(Select Feld1, Feld2, Feld3 from tabelle1 where Feld2 = 'Schraube'), q2 as (select Feld1, Feld3 from q1 where Feld3 <> 'klein' and Feld 3 <> '') Select Max(Feld1) from q2 Du kannst natürlich mal die erste Abfrage separat ausführen, ob die auch wirklich schnell ist. Wenn die schon ein paar Sekunden braucht, liegt das Problem woanders. |
AW: SQL optimimieren notwendig Max()
Was ist, wenn Du einen zusätzlichen berechneten Index anlegst:
Code:
CREATE INDEX feld3nichtleer ON Tabelle1 COMPUTED BY (Feld3<>'')
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz