2008-11-20 107 views
1

我有一个返回一组行的Informix SQL查询。对于我们一直在努力的网站的新版本,它进行了一些修改,我们的QA发现新版本返回不同的结果。经过调查,我们发现两个查询之间的唯一区别在于返回的字段数量。Informix SQL查询:两个类似的查询返回不同的结果

FROM,WHERE和ORDER BY子句是相同的,在SELECT部分​​中的列名不影响结果。这只是导致问题的领域数量。

任何想法?

+0

我觉得真正帮助,我们需要看到的SQL,表结构,或许一些示例内容是什么? – toolkit 2008-11-20 13:35:50

回答

1

的Informix的SQL引擎采用基于我们要检索的列的表的索引。当检索不同的列时,我们使用不同的索引,因此以不同的顺序获得结果。

2

添加--+ ORDERED连接顺序指令通过允许您得到您在可预见的顺序,每次的结果解决了这个问题。

的链接进入的指令是如何工作的 http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.sqls.doc/sqls1144.htm

的有序连接顺序指令 说明强迫优化连接表 或视图在其 出现的顺序查询的 的FROM子句。

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; 
0

我认为,由“字段”你的意思是输出数据的行数?根据我的经验,人们使用“字段”和“列”作为同义词。鉴于选择列表中的名称没有改变,你可能只会得到返回行数的差异。

由于相同的表,输入数据和查询,大小和结果集的内容应该是一样的,不管查询计划或服务器版本。除非您对结果强加一个顺序,否则结果集的顺序可能会不同,但在任何DBMS中都是合法的。

如果您收到的结果集,你可能应该联系IBM技术支持不同的尺寸。至少有一个结果集是错误的,错误的结果总是严重的。

尽管提示可能有助于提高性能,并且'运行更新统计信息(使用适当的选项集)'的标准建议通常会有所帮助,但当底层数据稳定时,索引的存在与否都不应改变结果集。 (如果数据发生了变化,也有各种各样的问题和并发症的担心。)

0

我能想到的只有两种解释这一点:

  1. 正在使用聚合函数,如COUNT( DISTINCT列),或
  2. 所选择的其他列的表中的外层加入

我知道你不希望发布的SQL和表定义,但是这并使它很难诊断。