172 похожих чатов

А вот как такую фигню объяснить? Если кверить лексемы которые

встречаются в индексе, то индекс используется. А если даю ему квери которая там не встречается, то он упорно делает сиквенс скан.

\d profile_name_index
Table "public.profile_name_index"
Column | Type | Collation | Nullable | Default
------------+---------+-----------+----------+------------------------------------------------
id | bigint | | not null | nextval('profile_name_index_id_seq'::regclass)
profile_id | integer | | not null |
name | text | | not null |
Indexes:
"profile_name_index_pkey" PRIMARY KEY, btree (id)
"profile_name_index_name_tsv_ix" gin (to_tsvector('russian'::regconfig, name))
"profile_name_index_profile_id_ix" btree (profile_id)
"profile_name_index_profile_name_uniq" UNIQUE CONSTRAINT, btree (profile_id, name)

Фигня:

SET enable_seqscan = off;
EXPLAIN SELECT
ix.name AS name
FROM profile_name_index ix
WHERE to_tsvector('russian'::regconfig, name) @@ websearch_to_tsquery('russian', 'wijefbwifwe')
LIMIT 20;

QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------------------------
Limit (cost=0.57..1098.06 rows=20 width=26)
-> Index Only Scan using profile_name_index_profile_name_uniq on profile_name_index ix (cost=0.57..84203921.87 rows=1534488 width=26)
Filter: (to_tsvector('russian'::regconfig, name) @@ '''wijefbwifw'''::tsquery)
(3 rows)

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

SET enable_seqscan = off;
EXPLAIN SELECT
ix.id AS ix_id,
ix.name AS name
FROM profile_name_index ix
WHERE to_tsvector('russian'::regconfig, name) @@ websearch_to_tsquery('russian', 'wijefbwifwe')
LIMIT 20;
QUERY PLAN
-------------------------------------------------------------------------------------------------------------
Limit (cost=12518.18..12539.41 rows=20 width=34)
-> Bitmap Heap Scan on profile_name_index ix (cost=12518.18..1640932.84 rows=1534488 width=34)
Recheck Cond: (to_tsvector('russian'::regconfig, name) @@ '''wijefbwifw'''::tsquery)
-> Bitmap Index Scan on profile_name_index_name_tsv_ix (cost=0.00..12134.56 rows=1534488 width=0)
Index Cond: (to_tsvector('russian'::regconfig, name) @@ '''wijefbwifw'''::tsquery)
(5 rows)

ПГ версии 14.2, вакум анализ все свежее.

2 ответов

23 просмотра

Закреп: https://t.me/pgsql/303899 Во-первых, explain(analyze, buffers) -- для ВСЕХ запросов, скорость которых вы сравниваете. (Думаю, вы многое поймёте только из этого. Или не вы, а мы поймём.). Во-вторых, именно analyze и именно buffers. Для всех, кто вообще способен завершыться. Тут это менее важно, но в любом случае оставляет меньшэ простора для догадок.

blkmrkt- Автор вопроса
Ilya Anfimov
Закреп: https://t.me/pgsql/303899 Во-первых, expl...

Я бы с радостью показал и ио статы, но запрос не завершается(

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта