> Well, for starters, see if PostgreSQL is currently using any indexes via > EXPLAIN. First rule of performance tuning: don't. I'm designing a new application. Data is not available yet. I'm using Postgres 8.1 in Windows. Database encoding is UTF-8 lc_ctype is Estonian_Estonia.1257. lc_collate is Estonian currently. However I can set lc_collate to C if this solves this issue. Doc says that " to allow PostgreSQL to use indexes with LIKE clauses under a non-C locale, several custom operator classes exist" I don't understand "non-C locale". Does this mean lc_collate or also some other lc_ setting ? > If it's not (which is probably the case), then your best bet is to > create functional indexes; ie: > > CREATE INDEX mytable__col1_4 ON mytable( substring( col1 for 4 ) ); > > You can then either > > SELECT ... WHERE substring( col1 for 4 ) = blah I need to optimize queries with variable number of characters in beginning like SELECT ... WHERE substring( col1 for 1 ) = 'f' SELECT ... WHERE substring( col1 for 2 ) = 'fo' SELECT ... WHERE substring( col1 for 3 ) = 'foo' etc This approach requires creating 10 indexes for each column which is unreasonable. In my current dbms, Microsoft Visual FoxPro I have a single index CREATE INDEX i1 ON mytable(col1) I can use queries: WHERE col1 BETWEEN 'f' and 'f'+CHR(255) WHERE col1 BETWEEN 'fo' and 'fo'+CHR(255) WHERE col1 BETWEEN 'foo' and 'foo'+CHR(255) All those queries can use same index automatically in all locales. CHR(255) is last character in any lc_collate sequence. CHR(255) is not used in col1 data. How to get same functionality in Postgres ? Does there exist unicode special character which is greater than all other chars ? Andrus. ---------------------------(end of broadcast)--------------------------- TIP 4: Have you searched our list archives? http://archives.postgresql.org