İki tablo var a, b, birincil anahtar onların dizini.Parametre neden SQL Server'da bir tablo taraması
Gereği: kimin b.PKey
boştur, a, b ait tüm kayıtları seçmek
@filter
, başka herhangi bir özel ayırıcı tarafından @filter
bölmek bulmak kayıtları filtresi içindedir.
Güncel Uygulama:
declare @filter nvarchar(max)= ''
SELECT *
FROM a
JOIN b ON a.PKey = b.aPKey
AND (@filter = '' OR b.PKey IN (SELECT item FROM splitFunction(@filter))
Hep bir tablo I
@filter=''
kaldırırsanız sadece, o aramaya indeksine değişecek, masa b tarama neden olacaktır son açıklama
and (@filter = '' or b.PKey in (select item from splitFunction(@filter))
bulundu.
Gereksinimi yerine getirmenin herhangi bir yolu var mı ve performansa zarar vermez mi?
Lütfen bu http://stackoverflow.com/questions/31500/do-indexes-work-with-in-clause adresini ziyaret edin –
@AbdulRasheed, teşekkürler, aynı sorun değil gibi görünüyor. Sorum şu: birleştirme koşulu '@filter = ''' bir tablo taramasına neden oluyor. Kaldırırsam, dizin kullanılacaktır. – BartMao
İlgili: [Dinamik Arama Koşulları] (http://www.sommarskog.se/dyn-search-2008.html) –