Çok miktarda veri içeren mevcut bir tabloya bir dizin eklediğimizde ne olur?


11

Yaklaşık 15 milyon kayıt içeren bir masam var. Şimdi tabloya bir dizin eklemek gerekir.

Dizin eklemek tablodaki her girdiyi güncellemek için biraz zaman alacaktır.

Dizini eklemenin aksama süresine neden olup olmayacağı konusunda oldukça kafam karıştı.

Evetse, çalışmama süresini nasıl aşabilirim?


Yanıtlar:


10

Düz metinle CREATE INDEX, tablo yazma işlemleri için kilitlenir, ancak okumalar için kilitlenmez.

CREATE INDEX CONCURRENTLYYazma kilitlerinden de kaçınmak için kullanın .

Gönderen üzerine PostgreSQL docsCREATE INDEX :

Bu seçenek kullanıldığında, PostgreSQL endeksi tabloya eşzamanlı ekleme, güncelleme veya silmeyi önleyen kilitler almadan oluşturur; oysa standart bir dizin derlemesi, bitene kadar tablodaki yazımları kilitler (ancak okur). Bkz - Bu seçeneği kullanırken dikkat edilecek birkaç uyarılar vardır Eşzamanlı Yapı Dizinleri'ni .

Ve daha spesifik olarak ( @ypercube yorumladı gibi ):

PostgreSQL, yazma işlemlerini kilitlemeden bina dizinlerini destekler . Bu yöntem, CONCURRENTLYseçeneği belirtilerek çağrılır CREATE INDEX. Bu seçenek kullanıldığında, PostgreSQL tablonun iki taramasını yapmalı ve buna ek olarak, dizini sonlandırmak için potansiyel olarak kullanabilen tüm işlemleri beklemelidir. Bu nedenle, bu yöntem standart bir dizin derlemesinden daha fazla toplam çalışma gerektirir ve tamamlanması çok daha uzun sürer. Ancak, dizin oluşturulurken normal işlemlerin devam etmesine izin verdiği için, bu yöntem bir üretim ortamına yeni dizinler eklemek için kullanışlıdır.

Cesur vurgu benim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.