From: | "ernesto contreras" <eeljuri(at)gmail(dot)com> |
---|---|
To: | "Lista PostgreSql" <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | El like no funciona con indices, a diferencia de Oracle |
Date: | 2006-08-22 14:47:00 |
Message-ID: | 79f90aff0608220746i39ebed1h92f8705506c04927@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Amigos, tengo una simple tabla con datos de "clientes", la consulta que
mayormente se efectúa es por nombre, apellido o una combinación de ambos,.
Se crearon tres índices:
uno único por un campo de "identificación "
uno por "apellido"
otro por "nombre y apellido"
la tabla tiene 3.500.000 registros, pero se pensaba que el optimizador se
comportaba similar al de "oracle" cuando se utiliza el operador "like", es
decir,
nombre like ('monte%'), en este caso lo usa (oracle) ya que el comodin no
está al principio, claro que no lo usa completo, pero ayuda.
La cuestión es que estamos sustituyendo una base de datos oracle y debe
quedar igual o mejor.
Datos de la estructura, índices y los Select's:
Column | Type | Modifiers
-----------+------------------------+-----------
nomter | character varying(240) |
apeter | character varying(50) |
numid | numeric(14,0) |
telef | character varying(12) |
email1 | character varying(100) |
email2 | character varying(100) |
codciudad | character varying(3) |
Indexes:
"tercero_pkey" UNIQUE, btree (numid, dvid, tipoid)
"id_tercero3" btree (nomter, apeter)
"id_tercero4" btree (apeter)
Búsqueda por "apellido"
explain select nomter, numid from tercero
where apeter like ('JUAN%');
QUERY PLAN
------------------------------------------------------------
Seq Scan on tercero (cost=0.00..48388.32 rows=1 width=26)
Filter: ((apeter)::text ~~ 'JUAN%'::text)
(2 rows)
Búsqueda por "nombre"
explain select nomter, numid from tercero
where nomter like ('%CASTRO%') and apeter like ('JUAN%');
QUERY
PLAN
----------------------------------------------------------------------------------------
Seq Scan on tercero (cost=0.00..51686.39 rows=1 width=26)
Filter: (((nomter)::text ~~ '%CASTRO%'::text) AND ((apeter)::text ~~
'JUAN%'::text))
(2 rows)
Agredecemos sus comentarios y/o sugerencias.
From | Date | Subject | |
---|---|---|---|
Next Message | ernesto contreras | 2006-08-22 14:48:04 | Re: El like no funciona con indices, a diferencia de Oracle |
Previous Message | Miguel Ortega | 2006-08-22 12:10:12 | Re: Trillado: OIDs |