burada bir kol çıkmak ve satırların bir sürü nerede kimliği = 1.
değilse olduğunu varsayalım gidiyorum , lütfen düzelt beni.
hmm, ben o parametre için geçeceğini merak ediyorum: SQL Server sorgu yavaş işlediğini
olası nedenlerinden biri de sorguya bakar ve gider olmasıdır.
1 olacak mı? Bir gazilyon satırları hakkında nerede var? Sadece 3
Sadece bilmiyorum sahip belki 1742
ya, ben daha iyi benim tüm üsleri
bir sütun halinde kapsayacak bir yürütme planı üretmek için emin olmak için bir tablo taraması yapmak, veya bir sütun kümesi düşük seçiciliğe sahiptir (yani, benzersiz değerlerin sayısı satır sayısından çok daha azdır), SQL Server bazen tüm satırları deterministik olarak almak için bir tabloya veya benzerine döner.
En azından bu benim deneyimim oldu. Özellikle, tarih aralığını zamana bağlı verileri olan tablolarda seçerken aynı davranışı gördüm, bu satırda @dt'nin bir satır içinde bulunduğu tüm satırları almak için bir WHERE dt <= @dt AND dt >= @dt
yapıyor, bir tablo taramasına dönüyor ve daha sonra gerçek tarihi SQL'e bir editöre yerleştirdiğimde çok daha hızlı çalışır.
Burada sorun seçicidir, SQL Server, ifadeniz için bir yürütme planı oluştururken tüm senaryoları en iyi nasıl karşılayacağını bilmez, bu nedenle tahmin etmeye çalışır.
Parametre için tipik değerini belirtmek üzere bir sorgu ipucu eklemeye çalışın, örn.:
sp_executesql "select * from tablesView where Id = @Id option (optimize for (@id = 1742))", N"@Id int", @Id=1
da kimliği = 1 ile satır bir şey var mı:
bir makale nedir parametre koklama olduğunu açıklayan burada yok mu? –
@Lasse, 50 kayıtm olsa bile, fark çok büyük. 0 sn vs 10 sn gibi, bir şey tablodan * seçilir, genellikle birleşme katının bir görünümüdür. – WhoIsNinja
"@ id" için alınan veri türü nedir? Dizinin kullanımını engelleyen kapalı bir dökümün olabilir. –