Encontrar cadenas similares con PostgreSQL rápidamente

Necesito crear una clasificación de cadenas similares en una tabla.

Tengo la siguiente tabla

create table names (
name character varying(255)
);

Actualmente estoy usandopg_trgm módulo que ofrece lasimilarity Función, pero tengo un problema de eficiencia. He creado un índice como elEl manual de Postgres sugiere:

CREATE INDEX trgm_idx ON names USING gist (name gist_trgm_ops);

y estoy ejecutando la siguiente consulta:

select (similarity(n1.name, n2.name)) as sim, n1.name, n2.name
from names n1, names n2
where n1.name != n2.name and similarity(n1.name, n2.name) > .8
order by sim desc;

La consulta funciona, pero es realmente lenta cuando tienes cientos de nombres. Además, tal vez olvidé un poco de SQL, pero no entiendo por qué no puedo usar la condiciónand sim > .8 sin obtener un error de "columna sim no existe".

Me gustaría cualquier pista para hacer la consulta más rápida.

Respuestas a la pregunta(1)

Su respuesta a la pregunta