Consulta SQL de Informix: dos consultas similares que devuelven resultados diferentes

StackOverflow https://stackoverflow.com/questions/305306

  •  08-07-2019
  •  | 
  •  

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áusulas

FROM, 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?

¿Fue útil?

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:

  1. Se está utilizando una función agregada, como COUNT (columna DISTINCT) o
  2. 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top