Есть ли способ сделать этот запрос PostgreSQL быстрее? - PullRequest
1 голос
/ 08 июня 2010

Я выполняю поиск без учета регистра в таблице с 7,2 миллионами строк, и мне было интересно, есть ли способ сделать этот запрос еще быстрее?

В настоящее время выполнение занимает около 11,6 секунд с одним параметром поиска, и я беспокоюсь, что как только я добавлю более одного, этот запрос станет очень медленным.

SELECT count(*)
FROM "exif_parse"
WHERE (description ~* 'canon')

--- Edit ---

phpPgAdmin сообщает, что в этом столбце есть индекс, как определено ниже:

desc_idx    CREATE INDEX desc_idx ON exif_parse USING btree (description)

--- Edit 2 ----

База данных содержит записи в следующем формате:

imaage_id    exif_field    description

И я использую описание как поиск, поэтому она содержит данные из кривой тона (0, 0, 32, 22, 64, 56, 128, 128, 192, 196, 255, 255) в объектив (Pentax-F FISH-EYE 1: 3,5-4,5 17-28 мм) для изготовления (Canon EOS REBEL XSi)

Ответы [ 2 ]

4 голосов
/ 08 июня 2010

Вы должны посмотреть на , используя FTS .

2 голосов
/ 10 мая 2011

Вы можете просто создать такой индекс:

CREATE INDEX idx_exif_parse_description_vpo
    ON exif_parse (lower(description) varchar_pattern_ops)

и выполнение следующего запроса займет миллисекунды:

SELECT count(*)
FROM "exif_parse"
WHERE (lower(description) LIKE 'canon')

FTS слишком излишне для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...