Consultas con Históricos
Publicado por Sergio (2 intervenciones) el 19/06/2008 13:39:36
Hola a todos y gracias por adelantado:
Mi consulta es la siguiente, he creado en MySQL una tabla para guardar clientes con un id, el caso es que cada vez que modifico algún dato del cliente no hago un update sino que añado un registro más clonando el anterior y modificando lo editado, cada registro tiene la fecha y hora de creación con lo que el de mayor fecha es el dato correcto (actual). De esta forma tengo un histórico del cliente. Por ejemplo, suponemos que tenemos estas columnas: id, nombre, poblacion, teléfono, edad, fecha_modificacion, para obtener el último registro de todos hago lo siguiente:
select * from tabla a, (select id, max(fecha_modificacion) as fhm from tabla) b where a.id=b.id and a.fecha_modificacion=b.fhm
y con esto la cosa funciona pero tengo unos 50000 registros en la tabla y la cosa empieza a ser lenta...
También veo inecesario sacar todos los id con sus max(fecha_mod), tabla b, cuando quizá solo filtro por un campo como por ejemplo poblacion:
select * from tabla a, (select id, max(fecha_modificacion) as fhm from tabla) b where a.id=b.id and a.fecha_modificacion=b.fhm and a.poblacion='MADRID'
En definitiva, tengo problemas de lentitud y no domino muy bien las bases de datos ¿me ayuda alguien?
Por ciento he creado un índice de varias columnas como id, fh ya que no puedo crear claves primarias por id por repetirse el número en cada registro del cliente...
Bueno, quedo en vuestras sabias manos
Mi consulta es la siguiente, he creado en MySQL una tabla para guardar clientes con un id, el caso es que cada vez que modifico algún dato del cliente no hago un update sino que añado un registro más clonando el anterior y modificando lo editado, cada registro tiene la fecha y hora de creación con lo que el de mayor fecha es el dato correcto (actual). De esta forma tengo un histórico del cliente. Por ejemplo, suponemos que tenemos estas columnas: id, nombre, poblacion, teléfono, edad, fecha_modificacion, para obtener el último registro de todos hago lo siguiente:
select * from tabla a, (select id, max(fecha_modificacion) as fhm from tabla) b where a.id=b.id and a.fecha_modificacion=b.fhm
y con esto la cosa funciona pero tengo unos 50000 registros en la tabla y la cosa empieza a ser lenta...
También veo inecesario sacar todos los id con sus max(fecha_mod), tabla b, cuando quizá solo filtro por un campo como por ejemplo poblacion:
select * from tabla a, (select id, max(fecha_modificacion) as fhm from tabla) b where a.id=b.id and a.fecha_modificacion=b.fhm and a.poblacion='MADRID'
En definitiva, tengo problemas de lentitud y no domino muy bien las bases de datos ¿me ayuda alguien?
Por ciento he creado un índice de varias columnas como id, fh ya que no puedo crear claves primarias por id por repetirse el número en cada registro del cliente...
Bueno, quedo en vuestras sabias manos
Valora esta pregunta
0