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 CustomerIdCustomertablonun yabancı bir anahtarı olduğundan, kümelenmiş bir dizine sahipCustomerIdolmak birleştirmeleri hızlandırmalıdır- İken
CustomerIdbenzersiz değil, ek sahipOrderIdendekste belirtilen sütun (Biz kullanabilirsiniz benzersizliği sağlayacakUNIQUEolanlar 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,
CustomerIdveOrderIdasla 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
CustomerIdgeldiğinde, kümelenmiş dizin herhangi bir ek çalışma olmadan tüm sütunları sağlayabilir.
Mu CustomerIdve OrderIden iyi seçenek gibi yaklaşım ses yukarıda verilen? Veya OrderIdtek 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 OrderIdve 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.