Re: OPTIMIZAR LA BUSQUEDA DE UN DATO

From: Maria Antonieta Ramirez <maramirez(at)ulsaneza(dot)edu(dot)mx>
To: FORO <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: OPTIMIZAR LA BUSQUEDA DE UN DATO
Date: 2016-06-01 14:38:00
Message-ID: SN2PR18MB0879ACA24DBB21C2761A5C41F6470@SN2PR18MB0879.namprd18.prod.outlook.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


Buen dia

Antes que nada te agradezo tu respuesta, me sirvio bastante la explicación que me diste ya que no conozco del todo como funciona postgres.

¿Hay algun tutorial de como administrar una base de postgres que me recomienden?

Sin mas por el momento quedo en espera de sus comentarios.
________________________________________
De: Jaime Casanova <jaime(dot)casanova(at)2ndquadrant(dot)com>
Enviado: miércoles, 1 de junio de 2016 0:05:16
Para: Maria Antonieta Ramirez
Cc: FORO
Asunto: Re: [pgsql-es-ayuda] OPTIMIZAR LA BUSQUEDA DE UN DATO

2016-05-31 17:37 GMT-05:00 Maria Antonieta Ramirez <maramirez(at)ulsaneza(dot)edu(dot)mx>:
>
> tengo una tabla de bitacora, la cual su estructura es la siguiente:
>
> CREATE TABLE prueba.bitacora
> (
> id integer NOT NULL DEFAULT nextval(‘prueba.bitacora_id_seq'::regclass),
> nombreusuario character(50),
> tipousuario integer,
> fecha timestamp without time zone,
> ip character(500),
> accion character(500),
> metodo character(500),
> nombrecompleto character(200),
> menu character varying(500),
> CONSTRAINT pk_bitacora PRIMARY KEY (id)
> );
>
[...]
>
> y hago esta consulta...
>
> --query de busqueda--
> select *
> from educaciondistancia.bitacora_maestria
> where nombrecompleto in ('Javier Perez Perez','Jesica Toscano Valencia')
>
> nota: el campo de nombrecompleto contiene el nombre y apellidos como esta
> cadena 'Javier Perez Perez'
>
> mi pregunta es la siguiente: como es una tabla de bitacora, tengo muchos
> registros y yo en el query de busqueda ingresare una lista como de 60
> nombres a buscar en la tabla de bitacora, hay algo que le pueda poner a mi
> tabla que haga mi busqueda mas rapida en ese campo?
>

Saludos,

Hay algo que puedes poner y algo que puedes quitar.

Empezaré por lo que puedes quitar: quitale bytes a la tabla.
Verás, para muchos campos estás usando el tipo de dato character pero
character según el estándar SQL debe almacenar todo el espacio que le
pusiste en la definición.
Es decir, si le pusiste character(500) debe almacenar 500 caracteres
los uses o no (completa con espacios en blanco al final).

postgres=# select pg_column_size(accion) from bitacora;
pg_column_size
----------------
504
(1 fila)

Si en lugar de usar character usaras varchar para esos campos el
tamaño del campo sería mucho menor (si no usas la mayor parte del
campo claro), por ejemplo en una tabla de ejemplo en el campo acción
ingrese PROBANDO y este es el tamaño que me da:

postgres=# select pg_column_size(accion) from bitacora_jcm;
pg_column_size
----------------
9
(1 fila)

Esto no es sólo teoría, en tu caso particular ingrese un registro en
la tabla como la pasaste y en una tabla idéntica pero con varchar en
lugar de character, aquí el resultado:

postgres=# select pg_column_size(bitacora) from bitacora;
pg_column_size
----------------
1821
(1 fila)

postgres=# select pg_column_size(bitacora_jcm) from bitacora_jcm;
pg_column_size
----------------
119
(1 fila)

Lo que en español significa en el primer caso que no puedes tener más
de 4 registros por página de disco pero en el segundo caso (usando
varchar en lugar de character) puedes tener hasta 68 registros por
página de disco.

Mientras más registros por página menos operaciones de lectura de
disco se necesitan para encontrar los registros que buscas.

Ahora vamos a lo que puedes agregarle a la tabla, si las busquedas van
a ser con un IN como muestras puedes ponerle un índice. uno normal
como este debería servirte:

CREATE INDEX nombre_indice ON bitacora (nombrecompleto);

--
Jaime Casanova www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message mauricio pullabuestan 2016-06-02 22:04:20 Create tabla unlogged que elimine automáticamente los registros una vez terminada la función
Previous Message Jaime Casanova 2016-06-01 05:05:16 Re: OPTIMIZAR LA BUSQUEDA DE UN DATO