Performance for case-insensitive queries

Поиск
Список
Период
Сортировка
От Vince DiCiero
Тема Performance for case-insensitive queries
Дата
Msg-id 000501bf2432$d325d560$3600a8c0@home.com
обсуждение исходный текст
Список pgsql-general
Hello, I am in need of help with performance of case insensitive queries.
I have searched the general and hackers archives for references to this
problem and
have found the information on how to build  a lower case index.

I have included output from 3 query plans that detail my performance
problem.
I show the section of the where clause that changes for the 3 queries.
The 1st shows the case sensitive search that I have used on other db's that
are
not case sensitive. As you can see it executes very quickly on postgresql.
The 2nd shows the original attempt at doing a case insensitive search before
building the lower case index, by using the lower() function in the query.
This caused the queries to become very slow.
In the 3rd example I built a lower case index and it cut the query time in
half, but the queries still run very long, near 2 minutes with approximately
1 million rows.


(1) Build index on fieldvalue column.

testdb=> create index fieldvalueindex_2 on documentindex(fieldvalue);

[case sensitive search]
testdb-> ((DocumentIndex_0.FieldNum = 2 AND documentindex_0.fieldvalue =
'BELL SOUTH') )
NOTICE:  QUERY PLAN:

Unique  (cost=6.06 rows=13 width=62)
  ->  Sort  (cost=6.06 rows=13 width=62)
        ->  Nested Loop  (cost=6.06 rows=13 width=62)
              ->  Nested Loop  (cost=4.10 rows=1 width=46)
                    ->  Index Scan using fieldvalueindex_2 on documentindex
documentindex_0  (cost=2.05 rows=)
                    ->  Index Scan using documents_pkey on documents
(cost=2.05 rows=11432 width=42)
              ->  Seq Scan on documentmaster  (cost=1.96 rows=29 width=16)
EXPLAIN

(2).
[case insensitive search with no lowercase index]
testdb-> ((DocumentIndex_0.FieldNum = 2 AND
lower(documentindex_0.fieldvalue) = 'bell south') )
NOTICE:  QUERY PLAN:

Unique  (cost=7579.73 rows=13 width=62)
  ->  Sort  (cost=7579.73 rows=13 width=62)
        ->  Nested Loop  (cost=7579.73 rows=13 width=62)
              ->  Nested Loop  (cost=7577.77 rows=1 width=46)
                    ->  Seq Scan on documentindex documentindex_0
(cost=7575.72 rows=1 width=4)
                    ->  Index Scan using documents_pkey on documents
(cost=2.05 rows=11432 width=42)
              ->  Seq Scan on documentmaster  (cost=1.96 rows=29 width=16)

EXPLAIN


(3). build lower case index.
testdb=> create index fieldvalueindex on documentindex(lower(fieldvalue)
text_ops);

[case insensitive search with lowercase index]
testdb-> ((DocumentIndex_0.FieldNum = 2 AND
lower(DocumentIndex_0.FieldValue) = 'bell south') )
NOTICE:  QUERY PLAN:

Unique  (cost=3820.81 rows=13 width=62)
  ->  Sort  (cost=3820.81 rows=13 width=62)
        ->  Nested Loop  (cost=3820.81 rows=13 width=62)
              ->  Nested Loop  (cost=3818.85 rows=1 width=46)
                    ->  Index Scan using fieldvalueindex on documentindex
documentindex_0  (cost=3816.80 rows)
                    ->  Index Scan using documents_pkey on documents
(cost=2.05 rows=11432 width=42)
              ->  Seq Scan on documentmaster  (cost=1.96 rows=29 width=16)

EXPLAIN


В списке pgsql-general по дате отправления:

Предыдущее
От: Jan Vicherek
Дата:
Сообщение: userspace fs implementation ? (perhaps with PostgreSQL)
Следующее
От: "nicks.emails"
Дата:
Сообщение: pgsql backend disconnected