postgresqldatabase-tuning

Add index and partitioning for Postgress table


I have this table in PostgreSQL database with 6 millions for rows.

CREATE TABLE IF NOT EXISTS public.processed
(
    id bigint NOT NULL DEFAULT nextval('processed_id_seq'::regclass),
    created_at timestamp without time zone,
    word character varying(200) COLLATE pg_catalog."default",
    score double precision,
    updated_at timestamp without time zone,
    is_domain_available boolean,
    CONSTRAINT processed_pkey PRIMARY KEY (id),
    CONSTRAINT uk_tb03fca6mojpw7wogvaqvwprw UNIQUE (word)
)

I want to optimize it for performance like adding index for column and add partitioning. Should I add index only for column word or it should be better to add it for several columns. What is the recommended to partition this table? Are there other recommended ways like adding compression for example to do some optimization?


Solution

  • First there is no compression, nor columnar indexes in PostGreSQL, like other RBBMS that have those features (as an example Microsoft SQL have 4 ways to compress data without needs to decompress to read or seek, and can use columstore indexes). For columnar indexes you have to go on the Fujistu PG version that cost a lot...

    https://www.postgresql.fastware.com/in-memory-columnar-index-brochure

    So the only ways you have to accelerates some accesses to seeks on "word" column are :

    And finally combine the two options.