Provided by: manpages-tr_1.0.5.1-2_all 

İSİM
CLUSTER - bir tabloyu bir indekse göre sıralar
KULLANIM
CLUSTER indeks_ismi ON tablo_ismi
CLUSTER tablo_ismi
CLUSTER
AÇIKLAMA
CLUSTER, PostgreSQL'in ismi tablo_ismi ile belirtilen tabloyu indeks_ismi isimli indeksine göre
sıralamasını sağlar. İndeks tablo_ismi tablosunda evvelce tanımlanmış bir indeks olmalıdır.
Bir tablo bu işlem sırasında, indeks bilgisine göre fiziksel olarak sıralanır. Sıralama tek seferlik bir
işlemdir: işlemin ardından tablo güncellendiğinde değişiklik sıralama işlemine tabi tutulmaz. Yani yeni
eklenen ya da güncellenen bir satırın indeks sırasına uygun olarak saklanmasına çalışılmaz. Eğer bu ya
da belirli aralıklarla sıralama yapılmak isteniyorsa, komut yinelenerek yeniden sıralama yaptırılmalıdır.
Bir tablo bir kere sıralandı mı, PostgreSQL sıralama için hangi indeksin kullanıldığını hatırlar. CLUSTER
tablo_ismi ile tablo ilk sıralamada kullanılan indeks ile tekrar sıralanacaktır.
CLUSTER parametresiz olarak kullanıldığında, komutu kullanan kullanıcının sahibi olduğu o anki
veritabanındaki bütün tablolarda ya da komutu ayrıcalıklı kullanıcı kullanıyorsa bütün veritabanlarındaki
bütün tablolarda yeniden sıralama yapılır (Hiç sıralama yapılmamış tablolara dokunulmaz). Bu şekilde
kullanım, bir hareketin ya da bir işlevin içinden gerçekleştirilemez.
Bir tablonun sıralanması sırasında üzerinde bir ACCESS EXCLUSIVE kilidi oluşturulur. Bu, tablonun işlem
bitene kadar başka her türlü veritabanı işleminden (hem okuma hem yazma) korunmasını sağlar.
PARAMETRELER
indeks_ismi
bir indeksin ismi.
tablo_ismi
Bir tablonun ismi (şema nitelemeli olabilir).
EK BİLGİ
Bir tablo içinde tek bir satıra erişildiği durumlarda verini sırasının aslında önemi yoktur. Ancak,
başkalarından daha fazla veriye erişmek ve bunları gruplayan bir indeks kullanmak eğilimindeyseniz,
CLUSTER kullanmak yararlı olacaktır. Bir tablodan belli bir aralıkta indeksli değerler ya da çok sayıda
satırla eşleşen tek bir indeksli değer isterseniz, indeks, eşleşen ilk satır için bellek sayfasını bir
kere tanımladıktan sonra, eşleşen diğer tüm satırlar bir ihtimal zaten aynı bellek sayfasında olacağından
CLUSTER'ın hem disk erişiminde hem de sorguyu hızlandırmakta çok yardımı olur.
Sıralama işlemi sırasında, tablonun verisini indeks sırasına göre içeren geçici bir kopyası oluşturulur.
Ayrıca tablo üzerindeki her indeksin geçici kopyaları da oluşturulur. Bunun yanında, disk üzerinde en
azından tablo ve indeksin toplam boyutunda boş bir alana ihtiyaç olacaktır.
CLUSTER sıralama bilgilerini hatırlayacağından, bir defa sıralanan tablolar kolayca tekrar sıralanabilir
ve VACUUM'a benzeyen bir ayarlama ile tabloların belirli zaman aralıklarında yeniden sıralanması
sağlanabilir.
Planlamacının tabloların sıralanması hakkında istatistikleri kaydetmesinden dolayı, yeni sıralanmış tablo
üzerinde ANALYZE [analyze(7)] çalıştırılması tercih edilmelidir. Aksi takdirde, planlamacı zayıf sorgu
planı seçimi yapabilir.
Veriyi sıralamanın başka bir yolu daha vardır. CLUSTER cümlesi özgün tabloyu belirttiğiniz indeks
sıralamasını kullanarak yeniden sıralar. Satırlar bellekten indeks sırasına göre çekileceğinden, eğer
bellek tablosu sırasızsa, çok büyük tablolarda girdiler farklı bellek sayfalarında olacağından, üstüne
bir de takas olarak disk kullanılmak zorunda kalınırsa bu işlem oldukça yavaş olabilir. (PostgreSQL'in
bir arabelleği olsa da dev bir tablo genellikle bu arabelleğe sığmaz.) Bir tabloyu sıralamanın diğer bir
yolu, istenen sırayı oluşturmak için ORDER BY deyimi içindeki PostgreSQL sıralama kodunu kullanan,
CREATE TABLE yeni_tablo AS
SELECT sütun_listesi FROM tablo ORDER BY sütun_listesi;
cümlesini kullanmaktır. Bu, sırasız veri için bir indeksleme yapmaktan genellikle daha hızlıdır. Bundan
sonra eski tabloyu silip, yeni_tablo'ya eski tablonun ismini vermek için ALTER TABLE ... RENAME cümlesini
kullanın ve tablonun indekslerini yeniden oluşturun. Ancak, bu yaklaşım OID'leri, kısıtları, yabancı
anahtar ilişkilerini, kullanıcı izinlerini ve tablonun diğer yardımcı özellklerini korumayacağından, bu
öğeler elle yeniden oluşturulmalıdır.
ÖRNEKLER
employees tablosunu emp_ind indeksine göre sıralamak için:
CLUSTER emp_ind ON emp;
employees tablosunu aynı indeksi kullanarak yeniden sıralamak için:
CLUSTER emp;
Veritabanındaki evvelce sıralanmış tüm tabloları sıralamak için:
CLUSTER;
UYUMLULUK
SQL standardında CLUSTER diye bir deyim yoktur.
İLGİLİ BELGELER
clusterdb(1).
ÇEVİREN
Nilgün Belma Bugüner <nilgun (at) belgeler·gen·tr>, Nisan 2005
PostgreSQL CLUSTER(7)