![]() |
Datenbank: FireBird • Version: 2.0 • Zugriff über: IBX
IIF In Joinstatement
Huhu,
ich hätte mal eine kleine Frage ob eine solche Funktion überhautp möglich ist. Ich hab mel eine kleines Beispielstatement vorbereitet. Das Ziel dieser Abfrage ist es, die Anzahl der Lesevorgänge zu reduzieren.
SQL-Code:
Select A.Zaehler, IIF(A.WGR <> 0,W.bezeichnung,Cast('Keine WGR' as VarChar(10)))
from Artikel A iif (A.WGR <> 0 ,left outer join warengruppen W on A.Mnr = W.Mnr and A.wgr = W.wgrnr and W.AdressNr = 0) where ....... vielen Dank im Vorraus Jens |
AW: IIF In Joinstatement
Wo soll genau der Unterschied zu einem INNER JOIN sein?
|
AW: IIF In Joinstatement
Es geht mir nicht um das Join oder left outer join sondern darum, das join garnicht zu machen.
PS: Ich möchte die Verbindung zu den Warengruppen nur lesen, wenn die WGR <> 0 ist sonst soll nichts gelesen werden |
AW: IIF In Joinstatement
Ich will mich nicht zu weit aus dem Fenster lehnen, denke aber, dass das so nicht möglich ist. Wenn es jemand besser weiß, lasse ich mich gern belehren.
[edit] Wobei: in einer SP kann man sich das Statement ja zur Not auch selbst zusammenbasteln, vielleicht wäre das ein Ansatz. [/edit] |
AW: IIF In Joinstatement
Diese Art der Optimierung halte ich für ziemlich unglücklich.
Wieviel würde das denn einsparen? Es spart einen "Index-Lookup" auf den Index der Tabelle "warengruppen". Index-Strukturen werden bevorzugt im Speicher gehalten; die mögliche Ersparnis liegt im Millisekunden Bereich. Ausserdem würde der Interpreter, der das SQL auf interne Anweisungen umsetzt, mehr Zeit benötigen. Gespart wird also so gut wie nichts. Was würde man verlieren? Die Query wird durch die Optimierung so "verhunzt", dass ein fremder Programmierer den Sinn und Zweck erstmal nicht verstehen würde. Falls er dann kapiert hat, dass es nur um Optimierung geht, würde er seinen Kopf gegen den Monitor :wall: |
AW: IIF In Joinstatement
Es geht darum, ich habe eine View die eine SP aufruft die Entweder Daten neu berechnet oder aus einer Gespeicherten liste zulinkt.
die Sp gibt mir 12 Feldinformationen wieder zurück. da ich in einer View eine SP nur per (Select XXX from YYY()) aufrufen kann wurde ich das gerne abkürzen. bsp:
SQL-Code:
in der SP wird entschieden,
Create View Artikel
Select ArtikelNr, Bez, (Select LagerBestand from SP(A.PIX)), (Select Lagerwert from SP(A.PIX)), (Select Bestellt from SP(A.PIX)), (Select Bestelltwert from SP(A.PIX)), ..... from Artikel 1. Wenn der Artikel Bearbeitet wurde --> JA --> Dann Lagerwerte neu Berechnen Nein --> sonst letzte gespeicherten Lagerwerte anzeigen (hiert wird eine weitere Tabelle gelesen) und jetzt wollte ich die SP so umbauen, dann wenn nur die letzten werte geladen werden sollen dann per
SQL-Code:
Über dieses Konstrukt würde ich statt 12 mal 2 Lesevorgänge nur einen lesevorgang benötigen
Create View Artikel
Select ArtikelNr, Bez, iif(LetzteDatenanzeigen = 1, L.Lagerbestand,(Select LagerBestand from SP(A.PIX))) iif(LetzteDatenanzeigen = 1, L.LagerWert,(Select LagerBestand from SP(A.PIX))) iif(LetzteDatenanzeigen = 1, L.Bestellt,(Select LagerBestand from SP(A.PIX))) iif(LetzteDatenanzeigen = 1, L.Bestellwert,(Select LagerBestand from SP(A.PIX))) ..... from Artikel iif(LetzteDatenanzeigen = 1, Left outer join Lageranzeige)) --> Das Ganze auf 400.000 - 500.000 Daten gibt das schon einiges anzeitersparniss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:26 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-2025 by Thomas Breitkreuz