Provided by: manpages-tr_1.0.5.1-2_all bug

İ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