Düzeltme: yeniden sipariş, süzgeç ölçütü önce Seçici olmayan birleştirmeler ve dış birleşimler ile dış birleşimler

Makale çevirileri Makale çevirileri
Makale numarası: 318530 - Bu makalenin geçerli olduğu ürünleri görün.
# HATA: 356418 (shiloh_bugs)
Hepsini aç | Hepsini kapa

Bu Sayfada

Belirtiler

Filtre koşulu olan en az bir dış birleşim içeren bir sorgu göndermek için dış birleşimi (örneğin, bir filtre koşulu bir sol dış birleşim tablosu sağ veya sol sağ dış birleşim tablosu), iç tablosu, WHERE yan tümcesinde SQL Server daha az seçmeli birleştirmeler önce dış birleşim erken gerçekleştirme ve filtre koşulu uygulamak yerine gerçekleştirebilir. Dış birleşim gelen filtresi koşulu sorgu için ölçüt daha seçici ise ölçütleri erken planındaki işlemek başarısız neden olabilir:
  • Ara birleştirme boyutları daha büyük.
  • Yüksek kaynak kullanımı, SQL Server tarafından işlem.
  • Sorgu için daha yavaş yanıt süresi.

Çözüm

SQL Server 2005'te çözümlemesi

Bu sorunu gidermek için <a0></a0>, SQL Server 2005 için en son hizmet paketini edinin. Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
913089En son SQL Server 2005 hizmet paketi nasıl elde edilir
SQL Server 2005 hizmet paketi yüklendikten sonra izleme bayrağı 4101 bu sorunu gidermek için etkinleştirmeniz gerekir.

SQL Server 2000 çözümleme

Bu sorunu gidermek için <a0></a0>, Microsoft SQL Server 2000 için en son hizmet paketini edinin. Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
290211En son SQL Server 2000 hizmet paketi nasıl elde edilir
Not: aşağıdaki düzeltmeyi Microsoft SQL Server 2000 Service Pack 3'ün yayımlanmasından önce oluşturulmuştur.

Bu düzeltmenin ingilizce sürümünde aşağıdaki dosya öznitelikleri olmalı veya daha yenisi:
   Version       File name
   -----------------------------

   8.00.0584     Sqlservr.exe
				
Not: Dosya bağımlılıkları nedeniyle, en son düzeltme veya dosyaları içeren özellik ek dosyalar da içerebilir.

Durum

SQL Server 2005'te statüsü

Microsoft, "Geçerli Olduğu Ürünler" bölümünde listelenen Microsoft ürünlerinde bu sorunun olduğunu onaylamıştır.
Bu sorun ilk olarak Microsoft SQL Server 2005 Service Pack 1'de giderilmiştir.

SQL Server 2000 statüsü

Microsoft, "Geçerli Olduğu Ürünler" bölümünde listelenen Microsoft ürünlerinde bu sorunun olduğunu onaylamıştır.
Bu sorun ilk olarak Microsoft SQL Server 2000 Service Pack 3'de giderilmiştir.

Daha fazla bilgi

Aşağıdaki contrived birleştirme senaryoyu, senaryoya göstermek için pubs veritabanı kullanır.:
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)
				
titleauthor tablonun sağ bir sol dış birleşim tablosu olduğunu unutmayın ve WHERE yan tümcesi koşula sonra dış birleşimi uygulanacak olan titleauthor. Çıktı, özgün, daha yavaş sorgu planı tüm iç birleşimler, ilk gerçekleştirilir ve dış birleştirme ve süzgeç gerçekleştirilen son olarak, bu sorgu için en seçmeli koşul olsa gösterir. Ikinci sorgu planı daha hızlı planı, içinde görüneceğini gösteren Zorlanmış bir planı olan dış birleştirme ve süzgeç gerçekleştirilen önce tarafından kalan olarak iç birleşimler izler.

Belirli Bu senaryo için düzeltmeyi uyguladıktan sonra ilk planı seçmek iyileştirici devam eder. Bunun nedeni, bu nedenle küçük tablolarıdır ve ilk planı tahmini maliyetini, daha iyi sonraki Alternatifler için aramaya devam etmek için olandan bu planı hemen çalıştırmak kabul, yeterince yetersiz olmasıdır. Tablolarındaki verilere arttıkça, ilk planı maliyeti yüksek olur ve ikinci bir plan seçmek iyileştirici başlatır.

Özellikler

Makale numarası: 318530 - Last Review: 4 Şubat 2008 Pazartesi - Gözden geçirme: 5.1
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL 2005 Server Workgroup
Anahtar Kelimeler: 
kbmt kbhotfixserver kbqfe kbsqlserv2000sp3fix kbbug kbfix kbsqlserv2000presp3fix KB318530 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:318530

Geri Bildirim Ver

 

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