Skip site navigation (1) Skip section navigation (2)

El like no funciona con indices, a diferencia de Oracle

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 (view raw or flat)
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.

Responses

pgsql-es-ayuda by date

Next:From: ernesto contrerasDate: 2006-08-22 14:48:04
Subject: Re: El like no funciona con indices, a diferencia de Oracle
Previous:From: Miguel OrtegaDate: 2006-08-22 12:10:12
Subject: Re: Trillado: OIDs

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group