PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Кога да използваме наследени таблици в PostgreSQL?

Има някои основни причини за използване на наследяване на таблици в postgres.

Да кажем, че имаме някои таблици, необходими за статистика, които се създават и попълват всеки месец:

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

В тази извадка имаме 2 000 000 реда във всяка таблица. Всяка таблица има ограничение CHECK, за да се гарантира, че в нея се съхраняват само данни за съответния месец.

И така, какво прави наследяването страхотна функция - защо е готино да се разделят данните?

  • ЕФЕКТИВНОСТ:Когато избираме данни, ние ИЗБИРАМЕ * ОТ статистически данни, КЪДЕ дата МЕЖДУ x и Y, а Postgres използва само таблиците, където има смисъл. напр. ИЗБЕРЕТЕ * ОТ статистика КЪДЕ датата МЕЖДУ '2010-04-01' И '2010-04-15' само сканира таблицата statistics_2010_04, всички останали таблици няма да бъдат докосвани - бързо!
  • Размер на индекса:Нямаме голяма мастна таблица с голям индекс мазнини на датата на колоната. Имаме малки таблици на месец, с малки индекси - по-бързо четене.
  • Поддръжка:Можем да изпълняваме вакуумно пълно, повторно индексиране, групиране на всяка месечна таблица, без да заключваме всички други данни

За правилното използване на наследяването на таблици като усилвател на производителността, вижте ръководството за postgresql. Трябва да зададете CHECK ограничения за всяка таблица, за да кажете на базата данни на кой ключ вашите данни се разделят (разделят).

Използвам интензивно наследяването на таблици, особено когато става въпрос за съхраняване на регистрационни данни, групирани по месеци. Съвет:Ако съхранявате данни, които никога няма да се променят (регистрационни данни), създайте или индексирайте с CREATE INDEX ON () WITH(fillfactor=100); Това означава, че няма да бъде запазено място за актуализации в индекса - индексът е по-малък на диска.

АКТУАЛИЗАЦИЯ:по подразбиране fillfactor е 100, от http://www.postgresql.org/docs/9.1/static/sql-createtable.html:

Коефициентът на запълване за таблица е процент между 10 и 100. 100 (пълно опаковане) е по подразбиране



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да актуализирате множество колони в PostgreSQL

  2. Как мога да вмъкна коментари на колони в PostgreSQL чрез Python?

  3. Rails 4 session.id от време на време нула

  4. GROUP BY и агрегирани последователни числови стойности

  5. Как да се справя с отварянето/затварянето на Db връзка в Go приложение?