Tamam ilginç bir soru hep aldı, aynı derecede seçicidir. 1M Rastgele Soyadları ve türlerimden, verilerimden indeks veya birincil anahtar olmadan yalnızca bir ham veri içeren bir sıfırlama veritabanına birer örnek aldım. Sütunların herhangi birinde standartlaştırılmamış verilerimin aralığı boyunca hiçbir ölçüm yapılmadı, bu nedenle veritabanımın gerçekliğini salt istatistiksel bir kümeden ziyade yansıtır.
select top 100 * from tblScratch where contactsurname = '<TestSurname>' order by NEWID()
select top 100 * from tblScratch where contacttyperef = 1-22 order by NEWID()
Newid, her seferinde veri listesini rastgele ayıklamak için var. Bunu 20 soyadı ve 20 tür için hızla koştum. Sorgular, soyad soyadından sonra soyadı çalıştırıldı. Referans numarasını aramak neredeyse 4x daha hızlıydı ve yaklaşık 1/2 kullanmıştı, bu yüzden kitaplar yıllar önce haklıydı.
Dize -
SELECT TOP 100 * FROM tblScratch WHERE contactsurname = 'hoare' ORDER BY NEWID()
Duration 430ms
Reads 902
CPU 203
Tamsayı - Bir numuneler Masanın üzerinde
SELECT TOP 100 * FROM tblScratch WHERE contacttyperef = 3 ORDER BY NEWID()
Duration 136ms
Reads 902
CPU 79
Ben SamplesId kümelenmiş dizin olması beklenebilir. İndeksin varlığı ve türleri büyük bir etkiye sahiptir. Bu gerçek ya da teorik bir soru mu? –
@SteveHenderson, "SamplesId'nin birincil anahtar olmasını bekler" şeklindeki yorumunuzu değiştirir ve% 100 ile aynı fikirdeyim :) Kimlik sütunları genellikle kümelenmiş dizini oluşturan veya olmayan anahtarlar belirler. Tabii ki, bu sadece bir varsayım ... –
@StuartAinsworth Hayır - Ben de kümelenmiş dizin olmasını beklerdim. Basit bir arama tablosuyla (Kimlik ve İsim, diğer bazı şeylerle), bu arama tablosunun fiziksel sıralamasının Id (Birincil anahtar ve kümelenmiş dizin) tarafından olmasını beklerim. –