Consulta SQL de Informix: dos consultas similares que devuelven resultados diferentes
Pregunta
Tengo una consulta Informix SQL que devuelve un conjunto de filas. Se modificó ligeramente para la nueva versión del sitio en el que hemos estado trabajando y nuestro control de calidad notó que la nueva versión arroja resultados diferentes. Después de la investigación, descubrimos que la única diferencia entre dos consultas estaba en el número de campos devueltos.
Las cláusulasFROM, WHERE y ORDER BY son idénticas y los nombres de columna en la parte SELECT no afectaron los resultados. Fue solo la cantidad de campos lo que causó el problema.
¿Alguna idea?
Solución 2
El motor Informix SQL utiliza los índices en las tablas en función de las columnas que queremos recuperar. Al recuperar diferentes columnas, usábamos diferentes índices y, por lo tanto, obteníamos los resultados en un orden diferente.
Otros consejos
Al agregar - + ORDERED
la directiva de orden de unión corrige el problema al permitirle obtener sus resultados en un orden predecible cada vez.
Los enlaces van a la descripción de cómo funciona la directiva http : //publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp? topic = / com.ibm.sqls.doc / sqls1144.htm
Use la directiva ORDENADA de orden de combinación para forzar al optimizador a unir tablas o vistas en el orden en que aparecer en la cláusula FROM del consulta.
SELECT --+ ORDERED
name, title, salary, dname
FROM dept, job, emp WHERE title = 'clerk' AND loc = 'Palo Alto'
AND emp.dno = dept.dno
AND emp.job= job.job;
¿Supongo que por 'campos' te refieres al número de filas de datos de salida? En mi experiencia, las personas usan 'campos' y 'columnas' como sinónimos. Dado que los nombres en la lista de selección no cambiaron, presumiblemente solo estaba obteniendo diferencias en el número de filas devueltas.
Dadas las mismas tablas, datos de entrada y consulta, el tamaño y el contenido del conjunto de resultados deben ser los mismos, independientemente del plan de consulta o la versión del servidor. La secuencia del conjunto de resultados puede ser diferente a menos que imponga un orden en los resultados, pero eso es legítimo en cualquier DBMS.
Si obtiene diferentes tamaños de conjuntos de resultados, probablemente debería ponerse en contacto con el Soporte técnico de IBM. Al menos uno de los conjuntos de resultados es incorrecto, y los resultados incorrectos siempre son graves.
Aunque las sugerencias pueden ayudar al rendimiento, y el consejo estándar de 'ejecutar ESTADÍSTICAS DE ACTUALIZACIÓN (con los conjuntos de opciones adecuados)' generalmente ayuda, ni la presencia ni la ausencia de índices deberían alterar el conjunto de resultados cuando los datos subyacentes son estables. (Si los datos están cambiando, hay una variedad de problemas y complicaciones de los que preocuparse).
Solo se me ocurren dos explicaciones para esto:
- Se está utilizando una función agregada, como COUNT (columna DISTINCT) o
- Las columnas adicionales que se seleccionan son de una tabla que está unida OUTER
Entiendo que no desea publicar las definiciones de tabla y SQL, pero eso dificulta el diagnóstico.