From: | Ever Daniel Barreto Rojas <ebarreto(at)nexusit(dot)com(dot)py> |
---|---|
To: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re[2]: velocidad en consulta con like |
Date: | 2007-05-30 01:31:19 |
Message-ID: | 72421718.20070529213119@nexusit.com.py |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
álvaro:
El 29/05/2007 a las 08:26 p.m., escribiste:
> Prueba creando un indice asi:
> create index foobar on per_nombres (per_apellidos varchar_pattern_ops,
> per_nombres varchar_pattern_ops)
> Es posible que sea mas conveniente crear el indice solamente con el
> apellido. Esto significaria que tendria que recorrer todas las personas
> de un mismo apellido y filtrar segun el nombre despues, lo que significa
> recorrer una mayor parte del indice, pero por otro lado cada entrada del
> indice sera menor por lo tanto el indice sera menor, por lo tanto
> tendras mejor uso del cache.
explain analyze
select *
from vw_personas
where per_nombres like 'EVER DA%' and per_apellidos like 'BARRETO R%'
"Sort (cost=11.54..11.55 rows=1 width=2252) (actual time=0.480..0.482 rows=1 loops=1)"
" Sort Key: persona.per_apellidos, persona.per_nombres"
" -> Nested Loop (cost=0.00..11.53 rows=1 width=2252) (actual time=0.334..0.432 rows=1 loops=1)"
" Join Filter: (persona.idecivil = ec.idecivil)"
" -> Nested Loop (cost=0.00..10.44 rows=1 width=2239) (actual time=0.318..0.401 rows=1 loops=1)"
" Join Filter: (persona.idtdoc = td.idtdoc)"
" -> Index Scan using idx_personas on persona (cost=0.00..9.38 rows=1 width=2203) (actual time=0.287..0.361 rows=1 loops=1)"
" Index Cond: (((per_apellidos)::text ~>=~ 'BARRETO R'::character varying) AND ((per_apellidos)::text ~<~ 'BARRETO S'::character varying) AND ((per_nombres)::text ~>=~ 'EVER DA'::character varying) AND ((per_nombres)::text ~<~ 'EVER DB'::character varying))"
" Filter: (((per_nombres)::text ~~ 'EVER DA%'::text) AND ((per_apellidos)::text ~~ 'BARRETO R%'::text))"
" -> Seq Scan on tipo_documento td (cost=0.00..1.03 rows=3 width=40) (actual time=0.006..0.010 rows=3 loops=1)"
" -> Seq Scan on estado_civil ec (cost=0.00..1.04 rows=4 width=17) (actual time=0.004..0.011 rows=4 loops=1)"
"Total runtime: 3.781 ms"
creo que no hace falta decir nada, esto funcionó de perlas!!!...
muchísimas gracias!!!
el índice creado:
CREATE INDEX idx_personas
ON persona
USING btree
(per_apellidos varchar_pattern_ops, per_nombres varchar_pattern_ops);
encontré en el manual lo que me sugeriste bajo "Operator Class",
hay algun lugar en donde pueda encontrar más información?
Cordiales saludos,
-------------------
Ever Daniel Barreto Rojas
e.mail: ebarreto(at)nexusit(dot)com(dot)py :: Nexus Information Technologies
web: www.nexusit.com.py
29/05/2007 09:18 p.m.
---------------------
Cuando menos sabes,
más crees...
---------------------
From | Date | Subject | |
---|---|---|---|
Next Message | mauricio lay | 2007-05-30 02:31:09 | Re: comienzo en postgresql |
Previous Message | usuario anonimo | 2007-05-30 00:51:50 | Re: comienzo en postgresql |