SORU
20 Mayıs 2009, ÇARŞAMBA


SQL Server : bir tablo değişkeni üzerinde Dizin Oluşturma

SQL Server 2000'de tablo değişkeni üzerinde bir dizin oluşturmak misin?

yani

DECLARE @TEMPTABLE TABLE (
        [ID] [int] NOT NULL PRIMARY KEY
        ,[Name] [nvarchar] (255) COLLATE DATABASE_DEFAULT NULL 
)

Adı üzerinde bir dizin oluşturabilirim?

CEVAP
29 HAZİRAN 2013, CUMARTESİ


Soru: SQL Server 2000 etiketlenmiş ama insanların ilk adresi veririm en son sürümü gelişmekte olan yararınadır.

SQL Server 2014

Kısıtlama tabanlı dizinler SQL Server, aşağıda açıklanan ekleme yöntemlerine ek olarak 2014 de benzersiz olmayan dizinler doğrudan tablo, değişken bildirimlerinde içi sözdizimi ile belirtilmesini sağlar.

Aşağıda bu örnek için sözdizimi.

DECLARE @T TABLE (
C1 INT INDEX IX1 CLUSTERED, /*Single column indexes can be declared next to the column*/
C2 INT INDEX IX2 NONCLUSTERED,
       INDEX IX3 NONCLUSTERED(C1,C2) /*Example composite index*/
);

Sütunlar ve filtre uygulanmış dizinler dizinler şu anda bu sözdizimi ile ancak ilan edilemez.


SQL Server 2000 - 2012

Adı üzerinde bir dizin oluşturabilirim?

Kısa cevap: Evet.

DECLARE @TEMPTABLE TABLE (
  [ID]   [INT] NOT NULL PRIMARY KEY,
  [Name] [NVARCHAR] (255) COLLATE DATABASE_DEFAULT NULL,
  UNIQUE NONCLUSTERED ([Name], [ID]) 
  ) 

Daha detaylı cevap aşağıda.

SQL Server geleneksel tablolar ya da kümelenmiş bir dizin ya da heaps olarak yapılandırılmıştır.

Kümelenmiş dizinler ya da vermemek yinelenen anahtar değerleri benzersiz bildirilmesi veya varsayılan olmayan benzersiz. Benzersiz değilse o zaman sessizce bir uniqueifier SQL Server ekler anahtarları onları benzersiz yapmak için çoğaltmak için.

Sigara kümelenmiş dizinler de açıkça benzersiz olarak ilan edilebilir. Aksi takdirde olmayan benzersiz bir durum için SQL (sadece birden bu yine benzersiz sağlar adds the row locator (yığın veya dizin anahtar RID kümelenmiş) tüm dizin anahtarlarının Server.

SQL Server 2000 - 2012 tablo değişkenleri dizinleri zımnen UNIQUE PRIMARY KEY kısıtlama oluşturarak oluşturulabilir. Bu sınırlama türleri arasındaki fark, birincil anahtar olmayan bir sütun null(ler) olmalıdır. Sütun benzersiz kısıtlama katılan null olabilir. NULLs huzurunda benzersiz kısıtlamaları SQL Server uygulaması SQL standardında başına değildir. Ayrıca bir tablo yalnızca bir birincil anahtar ancak birden çok benzersiz kısıtlamaları olabilir.

Bu mantıksal kısıtlamaları hem de fiziksel olarak benzersiz bir dizin ile yürütülür. Eğer açıkça belirtilen aksi PRIMARY KEY haline kümelenmiş dizin ve benzersiz kısıtlamaları olmayan kümelenmiş ama bu davranış tarafından geçersiz kılınabilir belirtme CLUSTERED NONCLUSTERED açıkça kısıtlamayı bildirisi (Örnek sözdizimi)

DECLARE @T TABLE
(
A INT NULL UNIQUE CLUSTERED,
B INT NOT NULL PRIMARY KEY NONCLUSTERED
)

Yukarıdaki sonucunda aşağıdaki dizinler örtülü olarak SQL Server değişkenleri 2000 - 2012 tablo oluşturulabilir.

 ------------------------------------- ------------------------------------- 
|             Index Type              | Can be created on a table variable? |
 ------------------------------------- ------------------------------------- 
| Unique Clustered Index              | Yes                                 |
| Nonunique Clustered Index           |                                     |
| Unique NCI on a heap                | Yes                                 |
| Non Unique NCI on a heap            |                                     |
| Unique NCI on a clustered index     | Yes                                 |
| Non Unique NCI on a clustered index | Yes                                 |
 ------------------------------------- ------------------------------------- 

Sonuncusu biraz açıklama yapmak gerekiyor. Tabloda bu başında değişken tanımlama cevabıolmayan benzersizName olmayan bir kümelenmiş dizin ile simüle edilmektedirbenzersizName,Id dizin (SQL Server sessizce sigara benzersiz NCI anahtar kümelenmiş dizin anahtar zaten eklersiniz hatırlayın).

Benzersiz olmayan bir kümelenmiş dizini el ile de IDENTITY bir sütun uniqueifier olarak hareket ekleyerek elde edilebilir.

DECLARE @T TABLE
(
A INT NULL,
B INT NULL,
C INT NULL,
Uniqueifier INT NOT NULL IDENTITY(1,1),
UNIQUE CLUSTERED (A,Uniqueifier)
)

Ama bu benzersiz olmayan bir kümelenmiş dizini normalde aslında nasıl uygulanması doğru bir simülasyon değil SQL bu ekler Sunucu "Uniqueifier" tüm satırlar. Sadece ihtiyacı olanlar değil.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Artorius FullPower

    Artorius Ful

    29 Temmuz 2007
  • Gavin Hoey

    Gavin Hoey

    21 Aralık 2007
  • Mismag822 - The Card Trick Teacher

    Mismag822 -

    18 EKİM 2008