Bu gerçekten indekslere ve veri türlerine bağlıdır.
Örnek olarak Stack Overflow veritabanı kullanıldığında, Kullanıcılar tablosu şöyle görünür:
Kimlik sütununda bir PK / CX vardır. Yani, Id'ye göre sıralanmış tablo verilerinin tamamıdır.
Tek dizin olarak, SQL zaten yoksa tüm şeyi (LOB sütunlarını sans) belleğe okumak zorundadır.
DBCC DROPCLEANBUFFERS-- Don't run this anywhere near prod.
SET STATISTICS TIME, IO ON
SELECT u.Id
INTO #crap1
FROM dbo.Users AS u
İstatistik zamanı ve io profili şöyle görünür:
Table 'Users'. Scan count 7, logical reads 80846, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SQL Server Execution Times:
CPU time = 2406 ms, elapsed time = 446 ms.
Sadece kimliğe ek bir kümelenmemiş dizin eklersem
CREATE INDEX ix_whatever ON dbo.Users (Id)
Şimdi benim sorgu tatmin çok daha küçük bir dizin var.
DBCC DROPCLEANBUFFERS-- Don't run this anywhere near prod.
SELECT u.Id
INTO #crap2
FROM dbo.Users AS u
Buradaki profil:
Table 'Users'. Scan count 7, logical reads 6587, physical reads 0, read-ahead reads 6549, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SQL Server Execution Times:
CPU time = 2344 ms, elapsed time = 384 ms.
Çok daha az okuma yapabilir ve biraz CPU zamanından tasarruf edebiliriz.
Tablo tanımınız hakkında daha fazla bilgi olmadan, daha iyi ölçmeye çalıştığınız şeyi çoğaltmaya çalışamıyorum.
Ancak, bu yalnız sütunda belirli bir dizin olmadıkça, diğer sütunların / alanların da taranacağını söylüyorsunuz? Bu yalnızca mağaza mağazalarının tasarımının doğasında var olan bir dezavantaj mıdır? Alakasız alanlar neden taranacak?
Evet, bu satır mağaza tablolarına özgüdür. Veriler satırda veri sayfalarında depolanır. Sayfadaki diğer veriler sorgunuzla alakasız olsa bile, tüm satır> sayfa> dizininin belleğe okunması gerekir. Diğer sütunlar üzerinde var oldukları sayfalar sorgu ile ilgili tek bir değer almak için taranan "taranan" olduğunu söyleyemem.
Ol 'telefon rehberi örneğini kullanarak: sadece telefon numaralarını okuyor olsanız bile, sayfayı çevirirken telefon numarasıyla birlikte soyadı, adı, adresi vb. Çeviriyorsunuz.