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
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.

Responses

Browse pgsql-es-ayuda by date

  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