Re: El like no funciona con indices, a diferencia de Oracle

From: Alejandro Gasca <agasca(at)yahoo(dot)com>
To: ernesto contreras <eeljuri(at)gmail(dot)com>, Lista PostgreSql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: El like no funciona con indices, a diferencia de Oracle
Date: 2006-08-23 14:30:37
Message-ID: 20060823143037.83541.qmail@web34304.mail.mud.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


--- ernesto contreras <eeljuri(at)gmail(dot)com> escribió:

> 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.
>
En la faq:
http://www.postgresql.org/docs/faqs.FAQ.html

seria conveniente que revisaras la parte indices:

http://www.postgresql.org/docs/faqs.FAQ.html#item4.6

bye.

__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis!
Regístrate ya - http://correo.espanol.yahoo.com/

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Andrea 2006-08-23 15:21:18 DUDA EXPLAIN - base datos 240GB
Previous Message Alvaro Herrera 2006-08-23 14:27:51 Re: explain - base de datos 240 GB