I am working with 500m rows (120GB) in Postgres 9.4, and I am trying to make SELECT statements as fast as possible. I am less concerned about the speed of INSERT and UPDATE, because my data only changes once a quarter and I'll probably use a backup database and switch over when that happens.
I'm working on a Debian Wheezy server, with 32GB of RAM and 320GB of solid-state. I have set maintenance_work_mem
to 16GB while setting up the database, and shared_buffers
to 12GB.
I have found that creating indexes is slow, and even with indexes, SELECT
queries are still quite slow. To help this, I've been recommended to use the C collation for the database.
I've been reading through the collation documentation, but it doesn't answer all my questions. So here's what I want to do with my database:
- Support fast
SELECT * FROM mytable WHERE col1='020406AAA'
queries. - Support fast
SELECT * FROM mytable WHERE col1 LIKE '02%'
queries. - Allow non-ASCII characters in some columns (e.g.
Ménière's disease
). This isn't absolutely critical, though - I could convert these to ASCII if it would really help for speed. - Add the PostGIS extensions to the database.
Are any of these contra-indications for using the C collation?
I'm expecting all the columns where I want to use LIKE
queries to consist of digits and uppercase letters only.
The data is a UK dataset, in English, for UK-only users. So I'm not expecting to have to add internationalization.