Como ver los índices en Postgres y MySQL

10 03 2009

Unos de los problemas de rendimiento se deben a las base de datos, un ejemplo sería tratar de traerse datos cuando no hay indices que definan la tabla, eso provocaría que el gestor de base de datos valla registro por registro aplicando las condiciones, y en donde la base de datos en grande podría generar problemas de rendimiento.

Unas de las formas de mejorar el problema de rendiemiento relacionados a las Bases de datos es crear índices, pero en mi caso es ver si una base de datos existente hay indices definidos, por lo que en mysql se podrían ver así:

show create table <tu_tabla>;

Y por otro lado en postgres es:

select * from pg_indexes where tablename = '</tu_tabla>';

Nota: cambiar <tu_tabla> por el nombre de la tabla que se quiere inspeccionar.

Con ése queda el truquito para encontrar cuellos de botellas en las base de datos 🙂

Anuncios




Job de Respaldo de una Base de Datos

11 02 2008

De regreso de un fin de semana agitado, para cuando se necesita crear un job de respaldo sencillo para SQL Server 2000, es crear un nuevo job en la parte de Management->SQL Server Agent del Servidor a el que se va a aplicar y luego creamos un job y ponemos los datos que se necesite en la pestaña de General y luego Step creamos uno y le ponemos como queramos y quede mas o menos de la siguiente manera:

Job Backup

En la pestaña de Advance podemos modificar datos con referente a nuestras necesidades, y con eso tenemos lo básico, si se necesitara hacer un respaldo diferente podria programarse un stored procedure y que sea llamado desde la ventana anterior.





Convertir filas por columnas en un SQL Query

6 08 2007

Por un trabajo de la U, me toco hacer un sistema de encuestas, por lo que los datos los metia en una BD, de forma que insertaba toda la respuesta en un String, el problema radica que si queria ver los datos se me regresaban asi:

id respuesta ipaddress
7 Saprissa 127.0.0.1
8 Heredia 127.0.0.1
9 Alajuela 127.0.0.1
10 Cartago 127.0.0.1
11 Saprissa 127.0.0.1
12 Saprissa 127.0.0.1

Ahora bien esos datos estan bien, hay varias formas de mostrar esos datos, el asunto es que esos mismo datos debían ser usados para hacer gráficos y lo gráficos solo entienden numeros en lugar de strings y también usa las columnas como referencia de los datos y las filas como parte de la estadística, para que los datos se mostraran en números hago un query que me cuente los datos repetidos y me los agrupe en solo uno y otra columna agrego las respuestas de esta manera

SELECT respuesta,count(respuesta) AS total FROM pregunta1 GROUP BY respuesta

Devuelve los datos asi:

respuesta total
Saprissa 3
Heredia 1
Alajuela 1
Cartago 1

La forma más facil para convertir esos datos en una columnas, es hacer select anidados (solo lo he probado con SQL Server) de esta forma:

SELECT
(SELECT COUNT(respuesta) FROM pregunta1 WHERE respuesta = 'Alajuela') as 'Alajuela',
(SELECT COUNT(respuesta) FROM pregunta1 WHERE respuesta = 'Cartago') as 'Cartago',
(SELECT COUNT(respuesta) FROM pregunta1 WHERE respuesta = 'Heredia') as 'Heredia',
(SELECT COUNT(respuesta) FROM pregunta1 WHERE respuesta = 'Saprissa') as 'Saprissa'

Devuelve como resultado:

Alajuela Cartago Heredia Saprissa
1 1 1 3

Voy a explicar este query primero que todo el hago el select pasado pero sin la columna respuesta, y le pongo como filtro la respuesta con el nombre exacto o si se query con like, y a todo eso nombramos la columna del nombre descriptivo de los datos devueltos, con mayor simplesa lo que esta dentro del parétesis seria el dato y lo que esta a la derecha del parentesis es el nombre de la columna, un aspecto importante es la coma al final de subquery que es un delimitador para hacer más subquery.

Es secillo al fin y al cabo es otra forma de ver los datos 😛 .