2012-10-24 13 views
5

Ben sütun CompanyName nvarchar(250) içeren bir tablo Com_Main var. Sonra bu sütun üzerinde Index oluşturmakBilgisayarlı sütun dizini

alter table Com_main 
add left20_CompanyName as LEFT(CompanyName, 20) PERSISTED 

: Bu 250.

Ben hesaplanan bir sütun CompanyName ilk 20 karakter içerir left20_CompanyName eklemek istediğiniz performansı artırmak için = 19 ortalama uzunluğunu, maks uzunluğa sahiptir : kullandığım Yani

create index ix_com_main_left20CompanyName 
on Com_main (LEFT20_CompanyName) 

select CompanyName from Com_Main 
where LEFT20_CompanyName LIKE '122%' 

bu kümelenmemiş endeksi kullanır, ancak sorgu gibi olduğunda:

select CompanyName from Com_Main 
where CompanyName LIKE '122%' 

O tam tablo taraması kullanır ve bu endeksi kullanmayın.

Yani soru:

son sorguda SQL Server kullanımı hesaplanabilir sütun üzerinde bu dizini yapmak mümkün mü?

cevap

1

SQL sorgu motorunun LEFT20_CompanyName sütununun CompanyName sütununa çok düzgün bir şekilde ulaştığını anlayabileceğimi düşünmüyorum - hesaplanan bir sütun neredeyse her formülü kullanabileceğinden, bu dizinin bu dizinin bilinmesinin bir yolu yoktur. Bu durumda diğer sütun aslında yararlıdır.

Neden sadece CompanyName sütun üzerinde dizin oluşturmak? Peki bu alandaki birkaç değer ortalamadan uzunsa ne olur? Eğer sütun üzerinde doğrudan oluşturmak ve tamamen hesaplanan sütun önlemek, ben her iki durumda da endeksi kullanacaktır düşünüyorum.

Belki bir şeyi özlüyorum, ancak yalnızca ilk 20 karakterde hesaplanan sütunu yaparak kazanmaya çalıştığınızdan emin değilim.

+0

Evet, haklı olduğunuzu düşünüyorum, ancak asıl amaç hesaplanmış bir sütunu indeks olarak kullanmanın mümkün olup olmadığını kontrol etmekti. Tabii ki sonunda CompanyName sütununda bir dizin oluşturdum. Ben MS SQL varchar sütunu kısmi indeksleme desteklemediği görünüyor, bu yüzden bu cevaptır. –

İlgili konular