-
 Zitat von Fuerchau
Da kann ich Dieter nur zustimmen.
Die Reihenfolge der Whereklausel ist bei Vergleichen ungleich "=" von entscheidender Bedeutung:
where F1 between :#V1 and :#V2
and F2 between :#V3 and :#V4
Wenn V1 = Minval und V2 = Maxval wird ein Tablescan erzwungen.
Das war einmal! Zu CQE-Zeiten.
Heute wird das SQL-Statement analysiert und in Verbindung mit dem Statistics Manager, der Informationen darüber liefert wie viele verschiedene Schlüssel und Werte ein bestimmter Index liefert und wie schnell man mit diesem Index an die Daten kommt (bzw. wieviel das "kostet").
Die Indices werden vorselektiert, d.h. es wird zunächst geprüft, ob sich die Join-Felder, die Felder, die in den WHERE-Bedingungen auf =, IN und BETWEEN geprüft werden als Schlüssel-Felder in Indices hinterlegt sind. Dann werden die verschiedenen Indices bewertet und sobald ein "teurer" Index gefunden wird, wird der "günstigste" Index verwendet und die weitere Prüfung abgebrochen.
Ein (Binary Radix Tree) Index wird i.Ü. nur verwendet wenn weniger als 15-20% der Daten selektiert wurden.
Zwischen 15-20 und 70-80% kann der Optimizer auch noch einen Encoded Vector Index (EVI) verwenden, ansonsten wird die ganze Tabelle verarbeitet, (wobei auch nicht mehr Table Scans verwendet werden, sondern meist über RRN- und Values Listen gearbeitet wird.
-
De Technik dahinter ist mir letztlich egal.
Mein Erlebnis ist einfach (auch noch mit V7R4, dass solche Abfragen einfach langsam sind.
Bei nur ein paar 1000 Zeilen braucht man keine Indizes, da ist die Kiste sowieso schnell.
Bei ein paar Millionen Zeilen wird es schon mal kritisch.
Außerdem benötigen meine Queries in der Regel mehr als 1 Tabelle (auch schon mal bis zu 40), da gelten dann noch weitere Regeln. Ein Index alleine hilft da eher wenig.
Und ich habe schon genug Optimizervorschläge bekommen und ausprobiert ohne dass diese Indizes dann auch genommen wurden.
Auch so seltsame Vorschlage, statt dem Index "Firma, Werk, Teil" einen Index "Firma, Teil, Werk" zu nehmen entzieht sich mir da im Anschluss ja trotzdem der 1. Index verwendet wird.
Und ist ein RRN-Zugriff nichts anderes als TableScan?
Es steht außer Frage, dass die IBM i einen inzwischen besseren Optimizer hat. Meine Erfahrung ist, dass ich mit selbst erstellten Indizes sehr häufig bessere Laufzeiten erziele, weil der Optimizer diese dann verwendet. Da ist dann auch schon mal ein Index-Only-Zugriff dabei.
Similar Threads
-
By Tschabo in forum NEWSboard Programmierung
Antworten: 10
Letzter Beitrag: 11-03-21, 09:14
-
By msost in forum NEWSboard Programmierung
Antworten: 18
Letzter Beitrag: 07-04-17, 14:23
-
By chrisssiie in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 05-09-16, 13:27
-
By labm in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 07-05-15, 07:55
-
By mott in forum IBM i Hauptforum
Antworten: 7
Letzter Beitrag: 18-09-02, 15:42
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks