С помощью этой таблицы:Почему Postgres не использует мой индекс gin?
=> \d "user"
Table "public.user"
Column | Type | Modifiers
----------------------+-----------------------------+---------------------------------------------------
id | integer | not null default nextval('user_id_seq'::regclass)
email | character varying(255) |
Indexes:
"user_pkey" PRIMARY KEY, btree (id)
"user_email_key" UNIQUE CONSTRAINT, btree (email)
"user_email_idx" gin (email gin_trgm_ops)
Этот запрос не использует индекс джин:
=> explain select email from "user" where email ilike '%j%';
QUERY PLAN
--------------------------------------------------------------
Seq Scan on "user" (cost=0.00..3986.42 rows=11886 width=22)
Filter: ((email)::text ~~* '%j%'::text)
(2 rows)
Почему?
hah! вот и все. 'объяснять выбор электронной почты от пользователя, где адрес электронной почты ilike '% jjb%';' find 'Bitmap Heap Scan on "user" (cost = 28.02..49.45 rows = 11 width = 22) " –
Фактически вход должен быть как' % abc% ''% ab' или 'a%', поэтому это не всегда три символа. –