Makale Özeti

İndeksi alter komutu ile düzenlememiz dışında...

Makale


 

İndeksi alter komutu ile düzenlememiz dışında, SQL Server Management Studio içindeki Object Explorer’nin  Index Properties dialog kutucuğu ile de değişiklikler yapabiliriz. ALTER INDEX komutu ile, bir indeksi yeniden oluşturma (rebuild), organize etme (reorganize), devre dışı bırakmak (disable) ya da değişiklik yapmak için kullanılır.

 

ALTER INDEX {index_name | ALL}

  ON [{database_name.[schema_name]. | schema_name.}]

    {table_or_view_name}

  { REBUILD [WITH(<rebuild_index_option>[,...n])]

  | REORGANIZE [ WITH( LOB_COMPACTION = {ON | OFF})]

  | DISABLE

  | SET (<set_index_option>[,...n]) }

 

<rebuild_index_option> ::=

  { PAD_INDEX = {ON | OFF}

  | FILLFACTOR = fillfactor

  | SORT_IN_TEMPDB = {ON | OFF}

  | IGNORE_DUP_KEY = {ON | OFF}

  | STATISTICS_NO_RECOMPUTE = {ON | OFF}

  | ONLINE = {ON | OFF}

  | ALLOW_ROW_LOCKS = {ON | OFF}

  | ALLOW_PAGE_LOCKS = {ON | OFF}

  | MAXDOP = number_of_processors }

 

<set_index_option> ::=

  { IGNORE_DUP_KEY = {ON | OFF}

  | STATISTICS_NO_RECOMPUTE = {ON | OFF}

  | ALLOW_ROW_LOCKS = {ON | OFF}

  | ALLOW_PAGE_LOCKS = {ON | OFF} }

 

Buradaki anahtar kelimeleri inceleyelim.

 

REBUILD:  İndeksin kullandığı alanı düzenlemek için indeksi silip yeniden oluşturma işlemidir. İndeksin iç yapısında tablodaki verilere eşleşme operasyonunu gerçekleştirir.

REBUILD komutu, FILLFACTOR, PAD_INDEX, SORT_IN_TEMPDB, IGNORE_DUP_KEY ve STATISTICS_NORECOMPUTE seçenekleri ile birlikte kullanılabilir.

 

ALTER INDEX X_Salex_ManagerID

ON HumanResources.Employee

REBUILD WITH (FILLFACTOR = 60)

 

Eğer büyük yapıdaki bir indeksi yeniden yapılandırmak (rebuild) istiyorsak, diskimizde yeterli alan olup olmadığı kontrol edmeliyiz. Çünkü veritabanı yapısı, indeks tarafından kullanılan alanı boşaltmadan, başka bir alanda  veriyi kopyalayıp tekrar dizer.

 

Clustered indeksi yeniden oluşturmak demek otomatik olarak tüm nonclustered indeksleri yeniden oluşturmak anlamına gelmez. Bununla birlikte ALTER INDEX ALL komutu ile yeniden oluşturma işlemini gerçekleştirirsek, tüm indeksleri tekrar oluşturmuş oluruz.

 

REBUILD   komutu ile, ONLINE=ON yaparak ve MAXDOP’u tanımlayarak, online güncellemeler yapabiliriz.

 

REORGANIZE :     Bu işlem  için tempdb’de  ek bir alana ihtiyaç yoktur. Çok  sayıda satırı  tarayan sorgularda, yeniden yapılandırmak (reorganize) performansı arttırır. Reorganize işlemi, indeksin sadece leaf level’ında yeniden düzenleme gerçekleştirirken diğer seviyelerde herhangi bir düzenleme yapılmaz.

 

REORGANIZE komutu ile kullanılan tek opsiyon,  image, text, ntext,  varbinary(max), varchar(max) ve nvarchar(max) gibi büyük veriler içeren kolonların da yeniden yapılanacağını belirleyen LOB_COMPACTION ’dur.

 

ALTER INDEX X_Salex_ManagerID

ON HumanResources.Employee

REORGANIZE WITH (LOB_COMPACTION = ON

 

DISABLE :  Geçici olarak indeksi devre dışı bırakır. Bir tablounun clustered indeksini devre dışı bırakırsak, bu tablo çevrimdışı olarak işaretlenir. İndeksi  kullanıma alana kadar bu tablodaki tüm sorgu ve değişiklikler engellenir.

 

ALTER INDEX X_Salex_ManagerID

ON HumanResources.Employee

DISABLE

 

ALTER INDEX komutu ile, bir indeksin tekrar bölümlenmesini, kolon eklenmesini veya kolon silinmesini  sağlayamayız.  Bu işlemleri CREATE INDEX komutunun, DROP_EXISTING opsiyonu ile yapabiliriz.

 

İNDEKS SİLME

 

Tüm  indeksleri silmek için DROP INDEX komutu kullanılır veya SQL Server Management Studio’daki Object Explorer’dan Delete opsiyonu ile indeks silinebilir.

 

Söz dizimi SQL’in eski versiyonlarına göre değişmiştir ancak XML indeksleri dışında hala desteklenmekle beraber yeni uygulamalarda kullanılmamalıdır.

 

DROP INDEX index_name

  ON [schema_name.]{table_or_view_name}

  [ WITH (<drop_index_option>[,...n]) ]

 

<drop_index_option> ::=

  { ONLINE = {ON | OFF}

  | MAXDOP = number_of_processors

  | MOVETO { partition_scheme_name(column_name[,...n])] |

    filegroup_name | DEFAULT }

 

DROP INDEX X_Sales_Manager

ON Sales.Customer

WITH (ONLINE = ON, MAXDOP = 2)

 

İyi Çalışmalar Dilerim...

 

Özgür ALTUNTAŞ