Informix SQL查询:两个类似的查询返回不同的结果

时间:2008-11-20 13:33:10

标签: sql database informix

我有一个返回一组行的Informix SQL查询。对于我们一直在研究的网站的新版本略有修改,我们的QA注意到新版本会返回不同的结果。经过调查,我们发现两个查询之间的唯一区别在于返回的字段数。

FROM,WHERE和ORDER BY子句是相同的,SELECT部分​​中的列名称不会影响结果。只是引起问题的字段数量。

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

添加--+ ORDERED join-order指令可以让您每次都以可预测的顺序获得结果,从而解决了这个问题。

链接指向指令的工作原理 http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.sqls.doc/sqls1144.htm

  

使用ORDERED join-order指令   强制优化器连接表   或按其顺序查看   出现在。的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;

答案 1 :(得分:1)

Informix SQL引擎根据我们要检索的列使用表上的索引。检索不同的列时,我们使用不同的索引,因此得到的结果顺序不同。

答案 2 :(得分:0)

我认为“字段”表示输出数据的行数?根据我的经验,人们使用“字段”和“列”作为同义词。鉴于select-list中的名称没有改变,你可能只是在返回的行数上有所不同。

无论查询计划或服务器版本如何,给定相同的表,输入数据和查询,结果集的大小和内容应该相同。除非您对结果强加订单,否则结果集的排序可能会有所不同,但这在任何DBMS中都是合法的。

如果您获得不同大小的结果集,则应该联系IBM技术支持。至少有一个结果集是错误的,错误的结果总是很严重。

尽管提示可能有助于提高性能,并且“运行UPDATE STATISTICS(使用适当的选项集)”的标准建议通常会有所帮助,但是当基础数据稳定时,索引的存在与否都不会改变结果集。 (如果数据发生变化,则需要担心各种问题和复杂情况。)

答案 3 :(得分:0)

我只能想到两个解释:

  1. 正在使用聚合函数,例如COUNT(DISTINCT列)或
  2. 所选的其他列来自OUTER加入的表
  3. 我知道您不希望发布SQL和表定义,但这确实难以诊断。