I want to search against 2 columns which are in two different tables one is name
and the other is description
, of type string
and text
respectively.
When I came across various blogs / stuff on the internet, I really get confused to find the fastest way to get data.
There are 100K rows in each table.
What I have done so far: I created a tsvector
column for table containing description and indexed it with GIN
. But I am confused on how to do that for the name column?
I can't use ilike '%{keyword}%'
as it doesn't use indexing.
Is it good to use full text search for name
(string type) also, or what will be the best way for my case?
Thanks in advance
select *
from
((select name as "customId", id as aid
from accounts
where name ilike '%cust%' limit 10)
union all
(select t2."customId", null
from t2
where t2.tsv @@ to_tsquery('cust') limit 10)
) e2
CodePudding user response:
Your idea to search using UNION ALL
is good.
To speed up the substring search, you can use a trigram index:
CREATE EXTENSION IF NOT EXISTS pg_trgm;
CREATE INDEX ON accounts USING gin (name gin_trgm_ops);