Aşağıdaki gibi görünen bir SQL Server 2014 tablo var:
OrderId int not null IDENTITY --this is the primary key column
OrderDate datetime2 not null
CustomerId int not null
Description nvarchar(255) null
Ekibimdeki bazı kişiler kümelenmiş dizinin açık olması gerektiğini önerdiler OrderId
, ancak aşağıdaki nedenlerden dolayı CustomerId
+ OrderId
'nın daha iyi bir seçim olacağını düşünüyorum :
- Hemen hemen tüm sorgular görünecek
WHERE CustomerId = @param
, değilOrderId
CustomerId
Customer
tablonun yabancı bir anahtarı olduğundan, kümelenmiş bir dizine sahipCustomerId
olmak birleştirmeleri hızlandırmalıdır- İken
CustomerId
benzersiz değil, ek sahipOrderId
endekste belirtilen sütun (Biz kullanabilirsiniz benzersizliği sağlayacakUNIQUE
olanlar 2 sütun üzerinde kümelenmiş bir dizin oluştururken benzersizliğini olmamasından yükünü önlemek için, anahtar kelime) - Veri eklendikten sonra,
CustomerId
veOrderId
asla değişmez, bu nedenle bu satırlar ilk yazma işleminden sonra hareket etmez. - Veri erişimi, varsayılan olarak tüm sütunları isteyen bir ORM aracılığıyla gerçekleşir, bu nedenle dayalı bir sorgu
CustomerId
geldiğinde, kümelenmiş dizin herhangi bir ek çalışma olmadan tüm sütunları sağlayabilir.
Mu CustomerId
ve OrderId
en iyi seçenek gibi yaklaşım ses yukarıda verilen? Veya OrderId
tek başına daha iyi, çünkü tek başına bir tekliği garanti eden tek bir sütun mu?
Şu anda, tablonun üzerinde kümelenmiş bir dizin OrderId
ve kümelenmemiş bir dizin var CustomerId
, ancak kapsam dahilinde değil, bu nedenle bir ORM kullandığımız ve tüm sütunlar istendiğinden, bunları almak için fazladan bir çalışma var. Bu yazı ile performansı daha iyi bir CI ile geliştirmeyi düşünmeye çalışıyorum.
DB'mizdeki etkinlik yaklaşık% 85 okuma ve% 15 yazmadır.