consulta Informix SQL: Duas consultas semelhantes que retornam resultados diferentes

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

  •  08-07-2019
  •  | 
  •  

Pergunta

Eu tenho uma consulta Informix SQL que retorna um conjunto de linhas. Ele foi ligeiramente modificado para a nova versão do site que temos vindo a trabalhar e nossa QA notado que a nova versão retorna resultados diferentes. Após investigação, descobrimos que a única diferença entre duas consultas foram no número de campos retornados.

FROM, WHERE e ORDER BY cláusulas são idênticos e os nomes das colunas na parte SELECT não afetou os resultados. Foi apenas o número de campos que causou o problema.

Todas as idéias?

Foi útil?

Solução 2

O motor Informix SQL usa os índices nas tabelas com base nas colunas que deseja recuperar. Ao recuperar colunas diferentes que estávamos usando índices diferentes e, portanto, obter os resultados em ordem diferente.

Outras dicas

Adicionando --+ ORDERED juntar a ordem directiva corrige o problema, permitindo-lhe obter os resultados, a fim previsível de cada vez.

As ligações vai para a descrição de como funciona a directiva http :? //publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp topic = / com.ibm.sqls.doc / sqls1144.htm

Use a ORDENADOS juntar-fim directiva para forçar o otimizador para unir tabelas ou vistas na ordem em que eles aparecer na cláusula FROM da 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;

Suponho que por 'campos' você quer dizer o número de linhas de dados de saída? Na minha experiência, as pessoas usam 'campos' e 'colunas' como sinônimos. Dado que os nomes na lista de seleção não mudou, você provavelmente só foram ficando diferenças no número de linhas retornadas.

Dadas as mesmas tabelas, dados de entrada e de consulta, o tamanho e conteúdo do conjunto de resultados deve ser o mesmo, independentemente do plano de consulta ou versão do servidor. A sequenciação do conjunto de resultados pode ser diferente, a menos que você impor uma ordem nos resultados, mas isso é legítimo em qualquer DBMS.

Se você está recebendo diferentes tamanhos de conjuntos de resultados, você provavelmente deve ser entrar em contato com o Suporte Técnico IBM. Pelo menos um dos conjuntos de resultados é errado, e resultados errados são sempre graves.

Embora dicas podem ajudar o desempenho, eo conselho padrão de 'executar UPDATE STATISTICS (com os conjuntos adequados de opções)' geralmente ajuda, nem a presença nem ausência de índices deve alterar o conjunto de resultados quando os dados subjacente é estável. (Se os dados está mudando, há uma variedade de problemas e complicações para se preocupar.)

Não consigo pensar em apenas duas explicações para isso:

  1. Uma função de agregação está a ser usado, como COUNT (coluna distintos), ou
  2. As colunas adicionais que estão sendo selecionados são de uma tabela que é EXTERIOR juntou

Eu entendo que você não deseja publicar as definições SQL e tabela, mas isso faz com que seja difícil de diagnosticar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top