Поиск по фамилии: LIKE '%…%' и триграммы

SQLMiddle10 минпроверка — Спринтиндекс · PostgreSQL14-t008

Запрос select * from persons where surname = :surname выполняется медленно. Почему? Повесили индекс — но запрос то быстрый, то снова медленный. Почему?

Будет ли использоваться индекс для where surname LIKE '%значение%'? Построй индекс, который ускорит такой поиск:

SELECT * FROM persons WHERE surname LIKE '%4a7d1%';
schema.sqlsql
1CREATE TABLE persons (2    id      bigint PRIMARY KEY,3    surname text   NOT NULL4);5INSERT INTO persons SELECT i, md5(i::text) FROM generate_series(1, 100000) AS i;6CREATE INDEX idx_persons_surname ON persons (surname);
query.sqlsql
1SELECT * FROM persons WHERE surname LIKE '%4a7d1%'
⌘ Enter — проверить