FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
He estado probando añadiendo y quitando trozos del query original y descubierto que el problema viene con el último LEFT JOIN:
Si se deja, salen mal los datos. |
#2
|
||||
|
||||
Cada vez estoy más desanimado con este query, y mira que pintaba bien.
He hecho la prueba con left join resultados y con join resultados y eliminando resultados en la tabla NumElectos para que de un municipio no hubiera esos campos pero sí resultados. Y con las tablas completas sale este resultado: pero si suprimo lo que he comentado sale esto aunque en la tabla resultados siga habiendo datos del municipio en cuestión (en este caso el 175). No lo entiendo: con LEFT JOIN ¿no deberían salir datos para ese valor? No sé que estoy haciendo mal o no entendiendo. En el enlcae https://drive.google.com/file/d/1F3V...ew?usp=sharing hay un fichero TABLAS.RAR que tiene el script para crear y llenar las tablas implicadas en el query. |
#3
|
||||
|
||||
Al descargar el fichero te he pedido acceso.
En cuanto pueda descargarlo haré algunas pruebas para ver qué contienen las tablas... |
#4
|
||||
|
||||
He estado mirando las tablas...
Primera parte La primera duda es cómo se unen mesa, poblacion y numelectos. He inferido que mesas.codigo, poblacion.municipio y numelectos.circunscripcion es el mismo campo y lo he utilizado para los joins. La segunda duda es qué es proceso? He inferido que se trata de diferentes votaciones y he estado utilizando la número 42. Segunda parte. Lo primero que necesitas antes de hacer las acumulaciones es la tabla con todos los datos necesarios unidos mediante JOIN / LEFT JOIN.
Este SQL devuelve 113511 registros.
Ahora agrego el where para limitar los datos a tratar. En este caso he elegido alguno que devuelve datos y que hemos hablado en este hilo Este SQL devuelve 8 registros.
Final Ya tenemos los datos. Ahora solo tenemos que agruparlos y ordenarlos.
Dos formas de evitar que salgan registros "sin electos".
|
#5
|
||||
|
||||
PD.
Después de ejecutar el script, todo iba muy lento. He tenido que recaclular los índices para que todo vaya bien. IbExpert tiene la opción de ir a DataBase-> Recompute celectivity of all Indeces Básicamente recorre los índices de la base de datos y ejecuta SET STATISTICS INDEX [IndexName]:
|
#6
|
||||
|
||||
Cita:
Por otra parte, sobre la velocidad de ejecución he de decirte que para sacar todos los municipios a mi en SQL Manager me ha tardado 62 milisegundos. Únicamente las lecturas de la tabla mesas se hacen sin usar índices; tengo que ver por qué. |
#7
|
||||
|
||||
A mi también me va muy rápida la consulta, pero al principio los índices estaban desbalanceados (supongo que por el insert masivo del script) y todos tenínan un valor de 1 (o 0, no recuerdo bien).
Las estadísticas de los índices es una parte importante de lo que mira el planificador de SQL al hacer los JOINS. Esto te devuelve las estadísticas de los índices y deberían tener valores lo más bajo posibles sin ser 0.
Esto es lo que me devuelve ahora, después de ejeructar el "SET STATISTICS [indice]". Código:
RDB$RELATION_NAME RDB$INDEX_NAME RDB$STATISTICS ----------------- -------------- -------------- MESAS DISMES 0,001355013577 MESAS MUNMES 0,009803921916 MESAS PK_MESAS 0,001355013577 NUMELECTOS PK_NUMELECTOS 0,001915708766 PARTIDOS PK_PARTIDOS 0,018518518656 POBLACION PK_POBLACION 0,000017048846 RESULTADOS PK_RESULTADOS 0,000008809486 |
#8
|
||||
|
||||
Perdona por no haberte explicado las relaciones, pero has acertado en todas.
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
a vueltas con los servidores de datos | anubis | Varios | 11 | 13-01-2010 09:37:42 |
Dando vueltas con las capas | CHiCoLiTa | Providers | 0 | 24-01-2006 12:09:55 |
Dandolo vueltas a un indice | gario | Oracle | 0 | 17-03-2005 14:04:47 |
|