PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Kapan menggunakan tabel yang diwarisi di PostgreSQL?

Ada beberapa alasan utama untuk menggunakan pewarisan tabel di postgres.

Katakanlah, kami memiliki beberapa tabel yang diperlukan untuk statistik, yang dibuat dan diisi setiap bulan:

statistics
    - statistics_2010_04 (inherits statistics)
    - statistics_2010_05 (inherits statistics)

Dalam contoh ini, kami memiliki 2.000.000 baris di setiap tabel. Setiap tabel memiliki batasan CHECK untuk memastikan hanya data untuk bulan yang cocok yang disimpan di dalamnya.

Jadi apa yang membuat warisan menjadi fitur yang keren - mengapa membagi data itu keren?

  • KINERJA:Saat memilih data, kami PILIH * DARI statistik WHERE tanggal ANTARA x dan Y, dan Postgres hanya menggunakan tabel, jika masuk akal. Misalnya. PILIH * DARI statistik WHERE date ANTARA '2010-04-01' DAN '2010-04-15' hanya memindai tabel statistik_2010_04, semua tabel lainnya tidak akan disentuh - cepat!
  • Ukuran indeks:Kami tidak memiliki tabel gemuk besar dengan indeks lemak besar pada tanggal kolom. Kami memiliki tabel kecil per bulan, dengan indeks kecil - pembacaan lebih cepat.
  • Maintenance:Kita bisa menjalankan vacuum full, reindex, cluster di setiap tabel bulan tanpa mengunci semua data lainnya

Untuk penggunaan pewarisan tabel yang benar sebagai penguat kinerja, lihat manual postgresql. Anda perlu menyetel batasan CHECK pada setiap tabel untuk memberi tahu database, di kunci mana data Anda akan dipecah (dipartisi).

Saya sering menggunakan pewarisan tabel, terutama dalam hal menyimpan data log yang dikelompokkan berdasarkan bulan. Petunjuk:Jika Anda menyimpan data, yang tidak akan pernah berubah (data log), buat atau indeks dengan CREATE INDEX ON () WITH(fillfactor=100); Ini berarti tidak ada ruang untuk pembaruan yang akan dicadangkan dalam indeks - indeks lebih kecil pada disk.

UPDATE:default fillfactor adalah 100, dari http://www.postgresql.org/docs/9.1/static/sql-createtable.html:

Faktor pengisi untuk tabel adalah persentase antara 10 dan 100. 100 (pengemasan lengkap) adalah default



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara memilih id dengan grup tanggal maksimum berdasarkan kategori di PostgreSQL?

  2. Masalah pengaturan kunci utama khusus dalam migrasi Rails 4

  3. Cara Membuat Pengguna Hanya Baca di PostgreSQL

  4. Nama tabel atau kolom tidak boleh diawali dengan angka?

  5. Ubah nilai awal Django AutoField