Немного про быстродействие PostgreSQL. Поисковые запросы и индексы.

Posted in Programming by v.udartsev on 18 September 2016

Из личного опыта по оптимизации PostgreSQL базы данных.

Объем строк: >>> 800067 raws.

Строки типа: TEXT

Разбитие строк: ,TEXT1,TEXT2,TEXT3,~~~,

>>> 800067 raws.   
 ALTER TABLE table.list ADD COLUMN itemnameTSVector TSVECTOR;
    UPDATE table.list SET itemnameTSVector = to_tsvector(itemname);
    CREATE INDEX list_GINindex ON table.list 
        USING GIN(itemnameTSVector);

Поисковый запрос без использования индекса:

>>> 7.2 sec.
SELECT * FROM table.list
WHERE itemname LIKE '%TEXT1%' 
    and itemname LIKE '%TEXT3%';

Поисковый запрос с использованием индекса:

 >>> 7.0 sec.
SELECT * FROM table.list
WHERE tsvector(itemnameTSVector)
    @@ tsquery('TEXT1 & TEXT3');

Далее пробовал с поисковым запросом без индекса, но с запятыми, как с разделителями:

>>> 7.0 sec.
SELECT * FROM table.list
WHERE itemname LIKE '%,TEXT1,%' 
    and itemname LIKE '%,TEXT3,%';

Вот и вся оптимизация. Результат на лицо.