2016-05-31 17:37 GMT-05:00 Maria Antonieta Ramirez <marami...@ulsaneza.edu.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@postgresql.org) Para cambiar tu suscripci�n: http://www.postgresql.org/mailpref/pgsql-es-ayuda