Ich habe eine Ansicht mit zwei separaten Abfragen mit einer Union alle. Zum Beispiel:So optimieren Sie die Ansicht mit Union Alle
CREATE VIEW MyView AS
SELECT foo.id, bar.data
FROM foo
INNER JOIN bar ON foo.id = bar.id
UNION ALL
SELECT baz.id, baz.data
FROM baz
ich dann eine select-Anweisung für die Ansicht wie folgt ausführen:
SELECT * FROM MyView WHERE id = 1
Die ID von 1 existiert nur in der ersten select-Anweisung. Die mit den foo
und bar
Tabellen, aber die Union mit der baz
Tabelle verursacht immer noch, dass es langsamer läuft. Es ist schneller, wenn Sie die Verbindung beenden. Ich muss es jedoch dort lassen, da manchmal eine ID verwendet wird, die Ergebnisse von der zweiten Select-Anweisung zurückgibt.
Meine Frage ist: Gibt es eine Möglichkeit, sql Server zu helfen wissen, dass es keine Ergebnisse im zweiten Teil der Union alle gibt, so dass es diese Abfrage nicht ausführen muss?
Alle diese Daten befanden sich in einer Tabelle. Dies ist eine neue Datenstruktur, und alle unsere älteren Anwendungen stützen sich auf diese Ansicht, um Daten aus dieser neuen Datenstruktur zu lesen. Aus diesem Grund wissen wir nicht, welche Tabelle die Ergebnisse im Voraus haben wird.
Wenn Sie wissen vorher die Zeile Sie suchen aus der ersten Tabelle, Abfrage, die direkt – Amit
BTW, wenn Sie echte Abfrage sind ähnlich dies beinhaltet nicht einmal 'foo', benutze' bar' direkt, es hat alle Daten, die du brauchst. – Amit
Nein, das ist nur ein Beispiel. In Wirklichkeit gibt es Felder, die wir von beiden Tabellen benötigen. Ich habe einen Schnitt gemacht, der erklärt, warum ich vorher nicht weiß, welcher Tisch die Ergebnisse haben wird, die wir brauchen. – rgvassar