PostgreSQL - pg_trmg crear indice para mejorar las busquedas

 
Vista:
sin imagen de perfil
Val: 2
Ha disminuido 1 puesto en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

pg_trmg crear indice para mejorar las busquedas

Publicado por sebastian (1 intervención) el 08/04/2021 17:03:25
Hola.

Tengo una tabla muy voluminosa con los campos: referencia, nombre, apellidos, ciudad

He creado el índice gin:

1
create index refxx on tabla using gin(referencia gin_trmg_ops);

para en principio poder hacer búsquedas con parte del contenido del campo referencia, por ejemplo:

1
select * from tabla where  (similarity(referencia,'9616') > 0.10) and nombre = 'MANUEL'

porque necesito saber cuantas personas con nombre MANUEL tienen los dígitos 9616 contenidos en su referencia.

Supongo que hago no algo bien porque la select es muy muy lenta.

Podéis ayudarme?

Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Francisco
Val: 256
Oro
Ha mantenido su posición en PostgreSQL (en relación al último mes)
Gráfica de PostgreSQL

pg_trmg crear indice para mejorar las busquedas

Publicado por Francisco (110 intervenciones) el 28/05/2021 22:48:10
Hola

Esta lento porque no tienes un indice sobre el campo nombre, tampoco puedes usar la funcion similarity en WHERE porque no es indexable dinamicamente (auque es posible) , sin embargo puedes agregar el operador para este tipo de indices GIN y poder activar el indice apoyandote con un CTE y sobre ese CTE filtras con el resultado de similarity

1
2
3
4
5
6
7
8
9
10
-- EXPLAIN ANALYZE
WITH resultados AS(
  SELECT nombre, similarity(referencia, '9616') similarity
  FROM tabla
  WHERE nombre = 'Manuel'
    AND referencia % '9616'
)
SELECT *
FROM  resultados
WHERE similarity > 0.10

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar