İSİM¶
CREATE INDEX - yeni bir indeks tanımlar
 
KULLANIM¶
CREATE [ UNIQUE ] INDEX isim ON tablo [ USING yöntem ]
    ( {  sütun | ( ifade ) } [ işleç_sınıfı ] [, ...] )
    [  TABLESPACE tablo_alanı ]
    [  WHERE dayanak ]
 
AÇIKLAMA¶
CREATE INDEX belirtilen bir tablo üzerinden bir indeks
  oluşturur. İndekslerin birincil kullanım amacı
  veritabanı başarımını arttırmaktır (ancak,
  uygunsuz kullanımı başarımın düşmesiyle
  sonuçlanır).
 
İndeks için anahtar alanları sütun isimleri olarak ya da
  parantez içinde yazılmış ifadeler olarak belirtilir.
  İndeksleme yöntemi çoksütunlu indeksleri destekliyorsa,
  çok sayıda alan belirtilebilir.
 
Bir indeks alanı tablonun satırındaki bir veya daha fazla
  sütun değerinden hesaplanan bir ifade olabilir. Bu özellik,
  bazı temel veri dönüşümlerini temel alan veriye daha
  hızlı erişim sağlamak için kullanılabilir.
  Örneğin, upper(col)'a göre hesaplanan bir indeks, 
WHERE
  upper(col) = 'JIM' gibi bir deyimin belirtilebilmesini mümkün
  kılar.
 
PostgreSQL B-tree, R-tree, hash ve GiST indeksleme yöntemlerini
  içerir. B-tree indeksleme yöntemi bir Lehman-Yao yüksek
  bilinirlikli B-tree gerçeklenimidir. R-tree indeksleme yöntemi,
  Gutman'in dördül ayırma algoritması kullanılarark
  gerçeklenir. Hash indeksleme yöntemi ise Litwin'in bir
  gerçeklenimidir. Kullanıcılar da kendi indeksleme
  yöntemini tanımlayabilir ama bu oldukça
  karmaşıktır.
 
WHERE deyiminin varlığında, bir kısmî indeks
  oluşturulur. Bir kısmî indeks, bir tablonun kalanına
  göre indeksleme bakımından daha kullanışlı olan
  bir bölümündeki girdileri içeren bir indekstir.
  Örneğin, hem toptan hem de perakende siparişleri içeren
  bir tablomuz olsun, perakende siparişlerin tabloda daha az
  bulunmasına karşın en sık kullanılanların bunlar
  olduğunu varsayalım. Sadece bu kayıtlarla ilgili bir indeks
  oluşturarak başarımı önemli ölçüde
  arttırabilirsiniz. Başka bir olası kısmî indeks
  uygulaması, tablonun bir alt kümesindekilerin eşsizliğini
  sağlamak için 
WHERE ile 
UNIQUE'in birlikte
  kullanımıdır.
 
WHERE ile kullanılan ifade sadece indekslenen tablonun
  sütunlarına başvurabilir ama sadece indekslenen değil,
  bütün sütunlar kullanılabilir. Şimdilik, 
WHERE
  deyimi içinde altsorgular ve ortak değer işlevleri de
  kullanılamamaktadır. Aynı kısıtlamalar ifadelerdeki
  indeks alanları için de geçerlidir.
 
Bir indeks tanımında kullanılan bütün işlevler ve
  işleçler 
IMMUTABLE imli olmalıdır, yani
  sonuçlar bunların argümanlarına bağımlı
  olmalı ve argümanları asla yorumlanabilir olmamalıdır
  (başka bir tablonun içeriği ya da şimdiki zaman
  kullanılamaz). Bu sınırlama indeksin
  davranışının iyi tanımlanmış
  olmasını sağlar. Bir kullanıcı tanımlı
  işlevi bir indeks ifadesinde ya da 
WHERE deyiminde kullanmak
  istiyorssanız, işlevi tanımlarken 
IMMUTABLE imli
  olmasını sağlamayı unutmayın.
 
PARAMETRELER¶
  - UNIQUE
 
  - İndeks oluşturulurken ve her veri
      eklenişinde, tabloda birbirinin aynı değerler
      bulunmaması için sistemin sınama yapmasını
      sağlar. Girdilerin yinelenmesine sebep olacak bir veri girme veya
      güncelleme işleminin yapılmaya
      çalışılması bir hata üretecektir.
    
 
   
  - isim
 
  - Oluşturulacak indeksin ismi; burada şema
      nitelemeli isimler kullanılamaz. İndeks daima tabloyu
      içeren şemada oluşturulur.
    
 
   
  - tablo
 
  - İndekslencek tablonun ismi (şema nitelemeli
      olabilir).
    
 
   
  - yöntem
 
  - İndeks için kullanılacak yöntemin ismi.
      Değer olarak, btree, hash, rtree ve gist verilebilir. btree
      öntanımlı yöntemdir.
    
 
   
  - sütun
 
  - Tablo sütunun ismi.
    
 
   
  - ifade
 
  - Tablonun bir ya da daha fazla sütünu ile ilintili
      bir ifade. İfade yukarıdaki sözdiziminde
      gösterildiği gibi parantez içinde
      yazılmalıdır. Ancak, ifade bir işlev
      çağrısı biçimindeyse parantez içine
      alınmayabilir.
    
 
   
  - işleç_sınıfı
 
  - Bir işleç sınıfının ismi.
      Ayrıntılar için aşağıya bakınız.
    
 
   
  - tablo_alanı
 
  - İndeksin oluşturulacağı tablo
      alanı. Belirtilmezse, default_tablespace yapılandırma
      değişkeninin değeri; bu değişkene bir değer
      atanmamışsa veritabanının öntanımlı
      tablo alanı kullanılır.
    
 
   
  - dayanak
 
  - Bir kısmî indeks için kısıt
      ifadesi.
    
 
   
 
EK BİLGݶ
İndekslerin hangi durumlarda yararlı olduğu, hangi durumlarda
  kullanılmayacağı, ne zaman kullanıldığı
  gibi bilgileri
 
http://www.postgresql.org/docs/8.0/static/indexes.html adresinde bulabilirsiniz.
 
Şimdilik, çok sütunlu indekslerde sadece B-tree ve GiST
  indeksleme yöntemleri desteklenmektedir. Öntanımlı olarak
  en fazla 32 alan belirtilebilir. (Bu sınır PostgreSQL kurulum
  için yapılandırılırken değiştirilebilir.)
  B-tree şimdilik sadece eşsiz indeksleri desteklemektedir.
 
Bir işleç sınıfı bir indeksin her sütunu için
  belirtilebilir. İşleç sınıfı indeks
  tarafından sütunlar için kullanılacak işleçleri
  belirler. Örneğin, dört baytlık tamsayılar
  üzerindeki bir B-tree indeksi int4_ops sınıfını
  kullanırdı; bu işleç sınıfı dört
  baytlık tamsayıların karşılaştırma
  işlevlerini içerir. Uygulamada, sütun türüne
  göre öntanımlı olan işleç sınıfı
  genellikle yeterli olur. İşleç sınıflarına sahip
  olmanın ana esprisi, birden fazla anlamlı sıralaması
  olabilen bazı veri türlerinin olmasıdır.
  Örneğin, bir karmaşık sayı veri türü
  için sıralamayı hem gerçel kısmı hem de mutlak
  değeri için yapmak isteyebiliriz. Bunu veri türü için
  iki işleç sınıfı tanımlayarak ve indeksi
  oluştururken bu sınıflardan birini belirterek yapabilirdik.
  İşleç sınıfları hakkında daha fazla bilgi
  edinmek için
 
http://www.postgresql.org/docs/8.0/static/indexes-opclass.html ve
 
http://www.postgresql.org/uygulamalar/pgsql/xindex.html adreslerine
  bakınız.
 
Bir indeksi kaldırmak için 
DROP INDEX [
drop_index(7)]
  kullanılır.
 
İndeksler öntanımlı olarak 
IS NULL deyimleri
  için kullanılmazlar. Böyle durumlarda indeksleri
  kullanmanın en iyi yolu, 
IS NULL dayatmasını kullanan
  bir kısmî indeks oluşturmaktır.
 
ÖRNEKLER¶
films tablosunun title sütunu üzerinde bir B-tree indeksi
  oluşturmak için:
 
CREATE UNIQUE INDEX title_idx ON films (title);
 
 
films tablosunun code sütunu üzerinde bir indeks oluşturup, bu
  indeksin indexspace tablo alanında kalması için:
 
CREATE INDEX code_idx ON films(code) TABLESPACE indexspace;
 
 
UYUMLULUK¶
CREATE INDEX bir PostgreSQL oluşumudur. SQL standardında
  indeksler için bir bahis yoktur.
 
İLGİLİ BELGELER¶
ALTER INDEX [
alter_index(7)], 
DROP INDEX [
drop_index(7)].
 
ÇEVİREN¶
Nilgün Belma Bugüner <nilgun (at) belgeler·gen·tr>,
  Nisan 2005