Update: Äußere Verknüpfungen mit Filterkriterien vor nicht ausgewählte Verknüpfungen und Inklusionsverknüpfungen neu anordnen

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 318530 - Produkte anzeigen, auf die sich dieser Artikel bezieht
# FEHLER: 356418 (SHILOH_BUGS)
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Wenn Sie eine Abfrage, die mindestens eine äußere Verknüpfung enthält senden, eine Filterbedingung ist, möglicherweise in der WHERE-Klausel in der inneren Tabelle der äußeren Verknüpfung (z. B. eine Filterbedingung auf der rechten Tabelle eine linke äußere Verknüpfung oder die linke Tabelle eine rechte äußere Verknüpfung), SQL Server weniger ausgewählte Verknüpfungen führen Sie zuerst statt die äußere Verknüpfung frühzeitig durchführen und die Filterbedingung anwenden. Wenn die Filterbedingung aus der äußeren Verknüpfung eines selektiven Kriterien für die Abfrage ist, kann nicht die Kriterien frühzeitig im Plan verarbeiten zu führen:
  • Größere intermediate Verknüpfung.
  • Höhere Ressourcennutzung von SQL Server verarbeiten.
  • Langsamer Reaktionszeit für die Abfrage.

Lösung

Auflösung für SQLServer 2005

Installieren Sie das neueste Servicepack für SQL Server 2005, um dieses Problem zu beheben. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
913089Beziehen der neuesten Service Packs für SQL Server 2005
Nachdem Sie das SQL Server 2005 Servicepack installiert haben, müssen Sie das Ablaufverfolgungsflag 4101, um dieses Problem zu beheben aktivieren.

Auflösung für SQLServer 2000

Installieren Sie das neueste Service Pack für Microsoft SQL Server 2000, um dieses Problem zu beheben. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
290211So erhalten Sie das neueste Service Pack für SQL Server 2000
Hinweis : der folgende Hotfix wurde vor der Veröffentlichung von Microsoft SQL Server 2000 Service Pack 3.

Die englische Version dieses Updates müsste die folgenden Dateiattribute oder höher:
   Version       File name
   -----------------------------

   8.00.0584     Sqlservr.exe
				
Hinweis : aufgrund von Dateiabhängigkeiten das aktuellste Update oder Feature, das die Dateien enthält, auch enthält eventuell zusätzliche Dateien.

Status

Status für SQLServer 2005

Microsoft hat bestätigt, dass dies ein Problem in Microsoft-Produkten handelt, die im Abschnitt "Gilt für" aufgeführt sind.
Dieses Problem wurde erstmals im Microsoft SQL Server 2005 Service Pack 1.

Status für SQLServer 2000

Microsoft hat bestätigt, dass dies ein Problem in Microsoft-Produkten handelt, die im Abschnitt "Gilt für" aufgeführt sind.
Dieses Problem wurde erstmals in Microsoft SQL Server 2000 Service Pack 3 behoben.

Weitere Informationen

Das folgende Szenario erfundene Verknüpfung verwendet die Datenbank Pubs demonstrieren das Szenario:
set ansi_nulls off
go

use pubs
go

create procedure dbo.ansi_nulls_param @P1 varchar(11) as
select t.title_id, a.au_id, ta.title_id, s.stor_id from titles t 
   left outer join titleauthor ta on ta.title_id = t.title_id
   inner join authors a on a.au_id = t.title_id
   inner join sales s on s.title_id = t.title_id
where ta.title_id = @P1
go

exec dbo.ansi_nulls_param '123-45-6789'
go

drop proc dbo.ansi_nulls_param
go

--Slower Query Plan:
       |--Filter(WHERE:([ta].[title_id]=[@P1]))
            |--Nested Loops(Left Outer Join, OUTER REFERENCES:([t].[title_id]))
                 |--Nested Loops(Inner Join, OUTER REFERENCES:([s].[title_id]))
                 |    |--Nested Loops(Inner Join, OUTER REFERENCES:([s].[title_id]))
                 |    |    |--Index Scan(OBJECT:([pubs].[dbo].[sales].[titleidind] AS [s]))
                 |    |    |--Clustered Index Seek(OBJECT:([pubs].[dbo].[authors].[UPKCL_auidind] AS [a]), SEEK:([a].[au_id]=[s].[title_id]) ORDERED FORWARD)
                 |    |--Clustered Index Seek(OBJECT:([pubs].[dbo].[titles].[UPKCL_titleidind] AS [t]), SEEK:([t].[title_id]=[s].[title_id]) ORDERED FORWARD)
                 |--Index Seek(OBJECT:([pubs].[dbo].[titleauthor].[titleidind] AS [ta]), SEEK:([ta].[title_id]=[t].[title_id]) ORDERED FORWARD)

--Faster Query Plan:
       |--Nested Loops(Inner Join, OUTER REFERENCES:([a].[au_id]))
            |--Nested Loops(Inner Join, OUTER REFERENCES:([t].[title_id]))
            |    |--Filter(WHERE:([ta].[title_id]=[@P1]))
            |    |    |--Nested Loops(Left Outer Join, OUTER REFERENCES:([t].[title_id]))
            |    |         |--Index Scan(OBJECT:([pubs].[dbo].[titles].[titleind] AS [t]))
            |    |         |--Index Seek(OBJECT:([pubs].[dbo].[titleauthor].[titleidind] AS [ta]), SEEK:([ta].[title_id]=[t].[title_id]) ORDERED FORWARD)
            |    |--Clustered Index Seek(OBJECT:([pubs].[dbo].[authors].[UPKCL_auidind] AS [a]), SEEK:([a].[au_id]=[t].[title_id]) ORDERED FORWARD)
            |--Index Seek(OBJECT:([pubs].[dbo].[sales].[titleidind] AS [s]), SEEK:([s].[title_id]=[a].[au_id]) ORDERED FORWARD)
				
beachten, dass die Titleauthor -Tabelle die Rechte Tabelle eine linke äußere Verknüpfung ist und die WHERE-Klausel Bedingung für Titleauthor , die nach der äußeren Verknüpfung angewendet werden. Die Ausgabe zeigt den ursprünglichen, langsamere Abfrageplan, wo die inneren Verknüpfungen werden zuerst ausgeführt und die äußere Verknüpfung und der Filter erfolgt letzten, obwohl dies die am häufigsten ausgewählte Bedingung für die Abfrage ist. Der zweite Abfrageplan ist eine erzwungene Plan, der veranschaulicht, wie schnellere Plan, in dem aussehen wird die äußere Verknüpfung und der Filter erfolgt zuerst, gefolgt von der verbleibenden inneren Verknüpfungen.

Für dieses Szenario bestimmten weiterhin der Optimierer den ersten Plan auswählen, selbst nachdem Sie den Hotfix installiert haben. Dies liegt daran, dass diese Tabellen so klein sind und die geschätzte Kosten den ersten Plan niedrig genug, dass es besser erachtet ist, nur mit diesen Plan ausgeführt wird, als Suchvorgang für nachfolgende alternativen. Daten in den Tabellen zunimmt, die Kosten für den ersten Plan wird höher, und der Abfrageoptimierer beginnt, wählen Sie den zweiten Plan.

Eigenschaften

Artikel-ID: 318530 - Geändert am: Montag, 4. Februar 2008 - Version: 5.1
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Workgroup Edition
Keywords: 
kbmt kbhotfixserver kbqfe kbsqlserv2000sp3fix kbbug kbfix kbsqlserv2000presp3fix KB318530 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 318530
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com