![]() |
AW: SQL optimieren
Zitat:
Nach meiner Erfahrung ist der kombinierte Index in Tabelle2 (Feld1, Feld2) die einzige sinnvolle Lösung. Der Index, der nur Feld1 berücksichtigt, kann dann aber entfallen. Wahrscheinlich müssen die Felder auch in der Join-Bedingung der Abfrage in der selben Reihenfolge wie im Index auftauchen.
Code:
Im Plan darf dann nur noch dieser kombinierte Index auftauchen.
Select Tabelle1.Feld1
from Tabelle1 Left Outer Join Tabelle2 on Tabelle1.Feld1 = Tabelle2.Feld1 and Tabelle1.Feld2 = Tabelle2.Feld2 where Tabelle2.Feld2 is null |
AW: SQL optimieren
EDIT: Furtbichler hat recht.
Code:
Select Tabelle1.Feld1
from Tabelle1 Left Outer Join Tabelle2 on Tabelle1.Feld2 = Tabelle2.Feld2 and Tabelle1.Feld1 = Tabelle2.Feld1 where Tabelle2.Feld2 is null Zitat:
Die Query kombiniert alle Tupel aus Tabelle 1 mit allen Tupeln aus Tabelle 2, bei denen die Kombination der Felder Feld1 und Feld2 in beiden Tabellen die gleichen Daten haben. Damit nun die WHERE-Klausel alle Tupel aus Tabelle 1 liefert, für die mit dieser Bildungsvorschrift kein Datensatz in Tabelle 2 zugeordnet werden kann, darf Tabelle2.Feld2 keine Nullwerte akzeptieren. Jensw_2000: Das hier:
Code:
macht was anderes. Es kombiniert alle Tupel aus Tabelle 1 mit allen Tupeln aus Tabelle 2, für die Feld1 jeweils die gleichen Daten enthält und Feld2 in Tabelle 2 NULL ist. Die Where-Klausel filtert lediglich die Tupel aus Tabelle 1, für die Feld2 NULL ist.
Select
Tabelle1.Feld1 from Tabelle1 Left Outer Join Tabelle2 on Tabelle2.Feld1 = Tabelle1.Feld1 and Tabelle2.Feld2 is null Where Tabelle1.Feld2 IS NULL Deine Bildungsvorschrift verletzt also die implizite Voraussetzung, daß Feld2 in Tabelle2 keine Nullwerte akzeptiert. Stattdessen gehst Du davon aus, daß Nullwerte zugelassen sind - denn mit Deiner WHERE-Klausel schmeißt Du ja alle Tupel aus Tabelle 1 weg, die in Feld2 keinen NULL stehen haben. Genaugenommen wird die Ergebnismenge von Dir alle die Tupel aus Tabelle 1 enthalten, für die die Kombination Feld1/Feld2 in Tabelle 2 vorhanden ist und Tabelle1.Feld2 NULL ist. |
AW: SQL optimieren
Zitat:
|
AW: SQL optimieren
[QUOTE=Furtbichler;1216454][QUOTE=Blup;1216285]
Zitat:
Es kommt einen Fehlermeldung: ISC 335544985 operations system directive CreateFile failed Das System kann den angegeben Pfad nicht finden. So etwas habe ich noch nicht gehabt. Ich kommte eigentlich immer einen Index anlegen. Wie kann den so etwas sein ? Was mache ich denn falsch ? Ich versuche es jetzt schon seit einigen Tagen. Dumpfbacke |
AW: SQL optimieren
Google doch einfach mal.
|
AW: SQL optimieren
Zitat:
Dann bekomme ich dieser Ergebnis: isc_out_of_temp_space Wie kann ich den das beseitigen ? Fehlt hier Hauptspeicher oder sollte es an der Festplatte liegen ? Am Rechner wo der Server läuft oder am Client wo ich versuchen den Index zu erstellen ? Tanja |
AW: SQL optimieren
Um noch ein paar Abfragevarianten ins Spiel zu bringen:
Code:
oder auch
SELECT t1.Feld1, t1.Feld2 FROM
Tabelle1 t1 WHERE (t1.Felds1, t1.Feld2) NOT IN (SELECT t2.Feld1, t2.Feld2 FROM Tabelle2 t2)
Code:
(beide Statements jetzt aus dem Kopf zusammengeschraubt und ungetestet)
SELECT t1.Feld1 FROM
Tabelle1 t1 WHERE NOT EXISTS (SELECT * FROM Tabelle2 t2 WHERE t2.Feld1 = t1.Feld1 AND t2.Feld2 = t1.Feld2) Wenn du den WHERE-Teil t2.Feld1 = t1.Feld1 AND t2.Feld2 = t1.Feld2 oft brauchst könnte ein Index auf beide Felder (zumindestens in einer der beiden Tabellen) helfen (abhängig noch von anderen Faktoren wie Häufigkeit von NULL-Werten und Häufigkeiten der verschiedenen Feldwerte). |
AW: SQL optimieren
Zitat:
würde auf den Rechner tippen, auf dem der Firebird Server läuft. Dort die festplatte voll? Wenn es sich um ein Firebird-spezifisches Problem handelt, dann kann ich Dir schwerlich weiterhelfen, nehme ich nicht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:51 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