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