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

Оптимизирайте PostgreSQL таблици само за четене

Колони, които се използват за филтриране или присъединяване (или, в по-малка степен, сортиране ) представляват интерес за индексиране. Току-що избраните колони са едва уместни! За следната заявка се индексира само на a и e може да бъде полезно:

SELECT a,b,c,d
FROM   tbl_a
WHERE  a = $some_value
AND    e < $other_value;

Ето, е и евентуално c също са кандидати:

SELECT a,b,c,d
FROM   tbl_a
JOIN   tbl_b USING (f)
WHERE  a = $some_value
AND    e < $other_value
ORDER  BY c;

След като създадете индекси, тествайте дали наистина са полезни с EXPLAIN ANALYZE . Също така сравнете времената на изпълнение с и без индексите. Изтриването и повторното създаване на индекси е бързо и лесно. Има и параметри за експеримент с EXPLAIN ANALYZE . Разликата може да е зашеметяваща или да не съществува.
Тъй като вашите таблици са само за четене, поддръжката на индекса е евтина. Това е само въпрос на дисково пространство.

Ако наистина искате да знаете какво правите, започнете с четене на документите .

Ако не знаете какви заявки да очаквате...

  1. Опитайте да регистрирате достатъчно заявки, за да намерите типични случаи на употреба. Регистрирайте заявки с параметъра log_statement = all за това. Или просто регистрирайте бавни заявки, като използвате log_min_duration_statement .

  2. Създайте индекси това може да е полезно и проверете статистиката след известно време, за да видите какво всъщност се използва. PostgreSQL разполага с цяла инфраструктура за наблюдение на статистика . Един удобен начин за изучаване на статистика (и много други задачи) е pgAdmin където можете да изберете вашата таблица / функция / индекс и да получите всички данни в раздела "статистика" в браузъра на обекти (основен прозорец).

  3. Продължете, както е описано по-горе, за да видите дали използваните индекси наистина ускоряват нещата.

  4. Ако програмата за планиране на заявки избере да използва един или повече от вашите индекси, но без или с неблагоприятен ефект, тогава нещо вероятно не е наред с настройката ви и трябва да проучите основите на оптимизирането на производителността:вакуум, анализ, параметри на разходите, използване на паметта, ...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Асинхронен DBAppender с logback

  2. Heroku Postgres Грешка:PGError:ГРЕШКА:релационни организации не съществуват (ActiveRecord::StatementInvalid)

  3. свързване на postgresql и codeigniter

  4. Как да се свържа от docker-compose към Host PostgreSQL?

  5. Как да разбера дали последователност е инициализирана в тази сесия?