cicero22
27-05-09, 12:54
Hallo Forum,
wir beabsichtigen über unseren Artikelstamm eine eigene Volltextsuche zu programmieren mit deinem SQLRPGLE. Bislang sind wir schon recht zufrieden und haben Antwortzeiten im 500 ms Bereich. Der Anwender kann insgesamt 5 Suchbegriffe mit Leerzeichen getrennt eingeben - welche dann im SQLRPGLE über ein SQL auf Artikelstamm und Artikelmerkmale los gehen mit Like %text% (bzw. nur like %text bei den Merkmalen) Aus dem Lagerstamm soll "nur" der Bestand und der Lagerplatz dazugeholt werden. Jedoch ist diese im SQL "verknüpft" um später noch eine absteigende Sortierung nach Verfügbarkeit durchzuführen.
Kurz zum Dateihintergrund
Artikelstamm (knapp 300.000 Sätze)
Lagerstamm (knapp 100.000 Sätze)
Artikelmerkmale (knapp 2.500.000 Sätze)
Bisher sieht das SQL im SQLRPGLE wie folgt aus_
+ select distinct
+ AATNR ,
+ coalesce(AGART, 0) ,
+ coalesce(ALGNR, 0) ,
+
+ trim(abez1) concat ' '
+ concat trim(abez2) concat ' ' CONCAT trim(abez3) concat ' '
+ concat trim(abez4) ,
+
+ coalesce(AVERB , 0) ,
+ coalesce(AHALLE, '') ,
+ coalesce(AREIHE, '') ,
+ coalesce(APLATZ, '') ,
+ coalesce(ALATN1, '')
+ coalesce(ARTIKELMERKMAL , '')
+
+ from temp/v1000 a
+ left outer join temp/ARTIKELMERKMALDATEI c on a.aatnr = c.f2
+ where
+ ( UPPER(ABEZ1) like TRIM(:WORT1)
+ or UPPER(ABEZ2) like trim(:WORT1)
+ or UPPER(ABEZ3) like trim(:WORT1)
+ or UPPER(ABEZ4) like trim(:WORT1)
+ or UPPER(C.ARTIKELMERKMAL) like trim(:WORT1H)
+
+ )
+ and
+
+ ( UPPER(ABEZ1) like trim(:WORT2)
+ or UPPER(ABEZ2) like trim(:WORT2)
+ or UPPER(ABEZ3) like trim(:WORT2)
+ or UPPER(ABEZ4) like trim(:WORT2)
+ or UPPER(c.ARTIKELMERKMAL) like trim(:WORT2H)
+ )
+ and
+
+ ( UPPER(ABEZ1) like trim(:WORT3)
+ or UPPER(ABEZ2) like trim(:WORT3)
+ or UPPER(ABEZ3) like trim(:WORT3)
+ or UPPER(ABEZ4) like trim(:WORT3)
+ or UPPER(c.ARTIKELMERKMAL) like trim(:WORT3H)
+ )
+ and
+
+ ( UPPER(ABEZ1) like trim(:WORT4)
+ or UPPER(ABEZ2) like trim(:WORT4)
+ or UPPER(ABEZ3) like trim(:WORT4)
+ or UPPER(ABEZ4) like trim(:WORT4)
+ or UPPER(c.ARTIKELMERKMAL) like trim(:WORT4H)
+ )
+ and
+ ( UPPER(ABEZ1) like trim(:WORT5)
+ or UPPER(ABEZ2) like trim(:WORT5)
+ or UPPER(ABEZ3) like trim(:WORT5)
+ or UPPER(ABEZ4) like trim(:WORT5)
+ or UPPER(c.ARTIKELMERKMAL) like trim(:WORT5H)
+
+ and coalesce(AGART, 0) < 02 and coalesce(ALGNR, 0) < 02
+ order by 5 desc
Kurzerklärung Variablen:
AATNR = Artikelnummer
ABEZx = Artikelbezeichnung 1-4
Die V1000 im SQL ist ein View der Artikelstamm und Lagerstamm mit einem LEFT OUTER JOIN VERBINDET.
Ohne die wie oben im SQL angegebene Verknüpfung auf die Artikelmerkmale Datei (in der soll nur ein Merkmal mitdurchsucht werden) ist das SQL rasend schnell - doch sobald diese "große" Artikelmerkmaldatei mit einbezogen wird über den LEFT OUTER JOIN ist es "vorbei" mit der schnellen Suche! Da ist die Antwortzeit bei ca. 4 Sekunden.
Auch Versuche die ARTIKELMERKMAL Datei in den View (V1000) mit einzubeziehen brachten keinen merklichen Erfolg.
Im Joblog kann ich nicht erkennen das der AS/400 Zugriffspfade oder ähnliches fehlen.
Kann jemand helfen? Bringt eine Änderung/Anpassung der QAQQINI etwas? Gibt es eine spezielle Umwandlungsoption die wir vielleicht nicht kennen? Kann man das SQL "geschickter" umbauen? Unsere Maschine hat 4.300 CPW.
Danke - Dirk
wir beabsichtigen über unseren Artikelstamm eine eigene Volltextsuche zu programmieren mit deinem SQLRPGLE. Bislang sind wir schon recht zufrieden und haben Antwortzeiten im 500 ms Bereich. Der Anwender kann insgesamt 5 Suchbegriffe mit Leerzeichen getrennt eingeben - welche dann im SQLRPGLE über ein SQL auf Artikelstamm und Artikelmerkmale los gehen mit Like %text% (bzw. nur like %text bei den Merkmalen) Aus dem Lagerstamm soll "nur" der Bestand und der Lagerplatz dazugeholt werden. Jedoch ist diese im SQL "verknüpft" um später noch eine absteigende Sortierung nach Verfügbarkeit durchzuführen.
Kurz zum Dateihintergrund
Artikelstamm (knapp 300.000 Sätze)
Lagerstamm (knapp 100.000 Sätze)
Artikelmerkmale (knapp 2.500.000 Sätze)
Bisher sieht das SQL im SQLRPGLE wie folgt aus_
+ select distinct
+ AATNR ,
+ coalesce(AGART, 0) ,
+ coalesce(ALGNR, 0) ,
+
+ trim(abez1) concat ' '
+ concat trim(abez2) concat ' ' CONCAT trim(abez3) concat ' '
+ concat trim(abez4) ,
+
+ coalesce(AVERB , 0) ,
+ coalesce(AHALLE, '') ,
+ coalesce(AREIHE, '') ,
+ coalesce(APLATZ, '') ,
+ coalesce(ALATN1, '')
+ coalesce(ARTIKELMERKMAL , '')
+
+ from temp/v1000 a
+ left outer join temp/ARTIKELMERKMALDATEI c on a.aatnr = c.f2
+ where
+ ( UPPER(ABEZ1) like TRIM(:WORT1)
+ or UPPER(ABEZ2) like trim(:WORT1)
+ or UPPER(ABEZ3) like trim(:WORT1)
+ or UPPER(ABEZ4) like trim(:WORT1)
+ or UPPER(C.ARTIKELMERKMAL) like trim(:WORT1H)
+
+ )
+ and
+
+ ( UPPER(ABEZ1) like trim(:WORT2)
+ or UPPER(ABEZ2) like trim(:WORT2)
+ or UPPER(ABEZ3) like trim(:WORT2)
+ or UPPER(ABEZ4) like trim(:WORT2)
+ or UPPER(c.ARTIKELMERKMAL) like trim(:WORT2H)
+ )
+ and
+
+ ( UPPER(ABEZ1) like trim(:WORT3)
+ or UPPER(ABEZ2) like trim(:WORT3)
+ or UPPER(ABEZ3) like trim(:WORT3)
+ or UPPER(ABEZ4) like trim(:WORT3)
+ or UPPER(c.ARTIKELMERKMAL) like trim(:WORT3H)
+ )
+ and
+
+ ( UPPER(ABEZ1) like trim(:WORT4)
+ or UPPER(ABEZ2) like trim(:WORT4)
+ or UPPER(ABEZ3) like trim(:WORT4)
+ or UPPER(ABEZ4) like trim(:WORT4)
+ or UPPER(c.ARTIKELMERKMAL) like trim(:WORT4H)
+ )
+ and
+ ( UPPER(ABEZ1) like trim(:WORT5)
+ or UPPER(ABEZ2) like trim(:WORT5)
+ or UPPER(ABEZ3) like trim(:WORT5)
+ or UPPER(ABEZ4) like trim(:WORT5)
+ or UPPER(c.ARTIKELMERKMAL) like trim(:WORT5H)
+
+ and coalesce(AGART, 0) < 02 and coalesce(ALGNR, 0) < 02
+ order by 5 desc
Kurzerklärung Variablen:
AATNR = Artikelnummer
ABEZx = Artikelbezeichnung 1-4
Die V1000 im SQL ist ein View der Artikelstamm und Lagerstamm mit einem LEFT OUTER JOIN VERBINDET.
Ohne die wie oben im SQL angegebene Verknüpfung auf die Artikelmerkmale Datei (in der soll nur ein Merkmal mitdurchsucht werden) ist das SQL rasend schnell - doch sobald diese "große" Artikelmerkmaldatei mit einbezogen wird über den LEFT OUTER JOIN ist es "vorbei" mit der schnellen Suche! Da ist die Antwortzeit bei ca. 4 Sekunden.
Auch Versuche die ARTIKELMERKMAL Datei in den View (V1000) mit einzubeziehen brachten keinen merklichen Erfolg.
Im Joblog kann ich nicht erkennen das der AS/400 Zugriffspfade oder ähnliches fehlen.
Kann jemand helfen? Bringt eine Änderung/Anpassung der QAQQINI etwas? Gibt es eine spezielle Umwandlungsoption die wir vielleicht nicht kennen? Kann man das SQL "geschickter" umbauen? Unsere Maschine hat 4.300 CPW.
Danke - Dirk