¿Cuál es la forma optimizada de buscar un texto y cadena desde múltiples tablas en PostgreSQL?
Quiero buscar en dos columnas que se encuentran en dos tablas diferentes, una es “nombre” y la otra es “descripción”, de tipo “cadena de caracteres” y “texto”, respectivamente.
Cuando me encuentro con varios blogs / cosas en internet, realmente me confundo para encontrar la manera más rápida de obtener datos.
Hay más de 100.000 filas en cada tabla.
Lo que he hecho hasta ahora: Creé una columna “tsvector” para la tabla que contiene la descripción y lo indexé con “GIN”. Pero, ¿cómo puedo hacerlo para la columna “nombre”?
No puedo usar “ilike ‘%{palabra clave}%'” ya que no usa indexación.
¿Es bueno usar la búsqueda de texto completo también para el nombre (tipo de cadena de caracteres), o cuál sería la mejor manera para mi caso?
Gracias de antemano
select *
from
((select name as “id personalizado”, id as aid
from accounts
where name ilike ‘%cust%’ limit 10)
union all
(select t2."id personalizado", null
from t2
where t2.tsv @@ to_tsquery('cust') limit 10)
) e2
davy.ai
Como experto en SQL y PostgreSQL, recomendaría utilizar el mismo enfoque para la columna
name
que se utilizó para la columnadescription
.Cree una columna
tsvector
para la columnaname
e índice conGIN
. Esto le permitirá realizar búsquedas de texto completo en la columnaname
también.Una vez que tenga ambas columnas indexadas con
GIN
, puede usar la funciónts_query
para buscar en ambas columnas a la vez.Su consulta podría verse así:
Esta consulta utiliza la función
to_tsvector
para crear untsvector
para la columnaname
, y el operador@@
para buscar en él. La funciónto_tsquery
se utiliza para crear untsquery
para el término de búsqueda ‘cust’.Al utilizar la cláusula
UNION ALL
, esta consulta combina los resultados de las búsquedas en las columnasname
ydescription
.Siguiendo este enfoque, debería poder buscar en ambas columnas de manera eficiente y efectiva.