Мы получаем низкую производительность при выполнении запроса
select count(*) from test;
Это занимает 30 секунд.У нас 470 столбцов в таблице с несколькими индексами, а в таблице 50 миллионов записей.
select distinct name1,name2,id
from test
where id in (1234,6543,7643,9876);
Вышеприведенный запрос также занимает более 5 минут.Пожалуйста, предложите.
Я настроил параметры в postgresql.conf
, как показано ниже.
max_connections = 10
shared_buffers = 4GB
effective_cache_size = 12GB
maintenance_work_mem = 1GB
checkpoint_completion_target = 0.7
wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 4
effective_io_concurrency = 2
work_mem = 419430kB
min_wal_size = 1GB
max_wal_size = 2GB
idle_in_transaction_session_timeout = 9000000
Я использую PostgreSQL 9.6 и мой сервер имеет 16 ГБ ОЗУ
Можем ли мы создатьнесколько столбцов для одного индекса или отдельные индексы для одного столбца?
CREATE TABLE test (
accept_dt timestamp NULL,
test_line_number int4 NULL,
office varchar(120) NULL,
add_dt timestamp NULL,
name1 int4 NULL,
name2 int4 NULL,
name3 int4 NULL,
.....
.....
....
);
CREATE INDEX test_indx ON public.test USING btree (name1,name2,name3,name4);
CREATE INDEX test2_indx ON public. USING btree (accept_dt, test_line_number);