Колони, които се използват за филтриране или присъединяване (или, в по-малка степен, сортиране ) представляват интерес за индексиране. Току-що избраните колони са едва уместни! За следната заявка се индексира само на 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
. Разликата може да е зашеметяваща или да не съществува.
Тъй като вашите таблици са само за четене, поддръжката на индекса е евтина. Това е само въпрос на дисково пространство.
Ако наистина искате да знаете какво правите, започнете с четене на документите .
Ако не знаете какви заявки да очаквате...
-
Опитайте да регистрирате достатъчно заявки, за да намерите типични случаи на употреба. Регистрирайте заявки с параметъра
log_statement = all
за това. Или просто регистрирайте бавни заявки, като използватеlog_min_duration_statement
. -
Създайте индекси това може да е полезно и проверете статистиката след известно време, за да видите какво всъщност се използва. PostgreSQL разполага с цяла инфраструктура за наблюдение на статистика . Един удобен начин за изучаване на статистика (и много други задачи) е pgAdmin където можете да изберете вашата таблица / функция / индекс и да получите всички данни в раздела "статистика" в браузъра на обекти (основен прозорец).
-
Продължете, както е описано по-горе, за да видите дали използваните индекси наистина ускоряват нещата.
-
Ако програмата за планиране на заявки избере да използва един или повече от вашите индекси, но без или с неблагоприятен ефект, тогава нещо вероятно не е наред с настройката ви и трябва да проучите основите на оптимизирането на производителността:вакуум, анализ, параметри на разходите, използване на паметта, ...