FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
|||
|
|||
tablas grandes
Hola a todos,
Estoy usando delphi 6 e interbase 7. Ahora mismo, la información económica la tenemos dibidida en tres tablas. La tabla principal, eco1, tiene 95191 registros, eco2 tiene 12079, eco3 42493 registros. Un total de 149763 registros, y creciendo. Estas tablas están separadas por "temas". En una esta lo que realmente se nos debe, en otra el pasivo y en otra están registradas las ventas de un producto que no es el nuestro principal. El caso es que me están pidiendo que junte las tres tablas en una sola, pues la información se ve también por separado y ha dado lugar a errores. Sé que de cara a la aplicación, voy a necesitar seguir haciendo una diferenciación de los registros, según a cual de estos tipos de dato económico pertenezcan, lo cual puedo solucionar añadiendo un campo y que cada una de estas tablas tenga un valor en ese campo que lo distinga de las otras dos, para luego hacer mis filtrados por ese campo, pero claro, las tablas se espera que sigan creciendo, y no sé si es realmente más práctico juntarlas SOLO de cara a lo que muestre la aplicación, y mantenerlas separadas como hasta ahora, o si a pesar de que esto implique tener que trabajar con una tabla de más de 149763 registros, realmente esto no me va a relentizar los procedimientos que tengan que ver con ella. Agradecería que me comentaseis como lo veis vosotros. GRacias Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :) |
#2
|
||||
|
||||
Hola.
Puedes crear una vista, para poder manejar los datos de las 3 tablas, como si fueran de una sola. (Con UNION). Aunque también te funcionará bien el trabajar con una sola tabla. Puesto que 150.000 registros tampoco son tantos. Simplemente asegúrate de tener los índices necesarios para tus consultas. (Probablemente te va a ser más útil tener índices compuestos, es decir un índice por el campo que indica el tipo de registro, más el campo por el que se realiza la búsqueda, como por ejemplo una fecha). Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#3
|
|||
|
|||
Hola guillotmarc,
Gracias por tu respuesta. Por cierto, ¿a partir de cuantos se considera que tiene "muchos" registros una tabla? Otra cosa. Si al final unifico las tablas, ¿como hago?, por que las tres tablas tienen con primary key un campo, "CODIGO",que es autonumérico. ¿hago que la llave primaria sea ese campo "CODIGO", más lo que haya en el campo que determina a que tabla pertenecía? y en tal caso, ¿como hago para, antes de unirlas, asignarles a esos campo un valor X para todos los registros de la misma tabla? Es más, ¿cómo las fusiono asegurandome que no pierden datos? Muchas gracias, como siempre por todo Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :) |
#4
|
||||
|
||||
Hola Virginia.
No creo que haya un tope en el tamaño de las tablas. Si tienes los índices adecuados, podrás acceder con un rendimiento correcto, indistintamente al numero de registros. Los problemas creo que aparecerán antes, por tamaño del archivo de datos. Es decir que puedes empezar a tener problemas cuando la base de datos llegue a los 4 Gb. (tamaño máximo de los archivos en algunos sistemas operativos, y en algunas versiones de Interbase/Firebird). Repito que lo importante es tener los índices adecuados, lo que quiere decir que en una tabla grande, probablemente deberás definir índices compuestos (de más de un campo). Ejplo. Un consulta tipo select nombre from clientes where tipo = 3 and poblacion = 'Girona', obtendrá un rendimiento sensiblemente mejor si tienes un índice compuesto por Tipo y Población, que si tienes dos índices simples, uno para el campo Tipo y otro para Población. Puedes definir perfectamente, como has comentado, la clave primaria como compuesta. Formada por los campos Codigo y Tipo. Aunque tén en cuenta que cualquier tabla relacionada con esta, debe mantener la relación con los correspondientes campos Codigo y Tipo. Si la tabla relacionada solo tiene un campo Codigo, no podremos saber a cuales de los registros de la tabla principal se refiere. Para fusionar las tablas, puedes modificar primero las originales, y añadirles el campo Tipo, entonces asignas el valor de tipo en cada registro. Una vez actualizadas todas las tablas ya podriamos fusionarlas en una de nueva. alter table TABLA_1 add TIPO integer; update TABLA_1 set TIPO = 1; alter table TABLA_2 add TIPO integer; update TABLA_2 set TIPO = 2; alter table TABLA_3 add TIPO integer; update TABLA_3 set TIPO = 3; Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#5
|
||||
|
||||
Cita:
Cita:
Cita:
Código:
update tabla1 set tipo = '1'; update tabla2 set tipo = '2'; update tabla3 set tipo = '3'; Cita:
Código:
Insert into tabla4 select * from tabla1; Insert into tabla4 select * from tabla2; Insert into tabla4 select * from tabla3; /* Si no hay mensajes de error... todo estubo bien.... entonces */ commit;
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
|
|
|