我有一个返回一组行的Informix SQL查询。对于我们一直在努力的网站的新版本,它进行了一些修改,我们的QA发现新版本返回不同的结果。经过调查,我们发现两个查询之间的唯一区别在于返回的字段数量。Informix SQL查询:两个类似的查询返回不同的结果
FROM,WHERE和ORDER BY子句是相同的,在SELECT部分中的列名不影响结果。这只是导致问题的领域数量。
任何想法?
我有一个返回一组行的Informix SQL查询。对于我们一直在努力的网站的新版本,它进行了一些修改,我们的QA发现新版本返回不同的结果。经过调查,我们发现两个查询之间的唯一区别在于返回的字段数量。Informix SQL查询:两个类似的查询返回不同的结果
FROM,WHERE和ORDER BY子句是相同的,在SELECT部分中的列名不影响结果。这只是导致问题的领域数量。
任何想法?
的Informix的SQL引擎采用基于我们要检索的列的表的索引。当检索不同的列时,我们使用不同的索引,因此以不同的顺序获得结果。
添加--+ 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;
我认为,由“字段”你的意思是输出数据的行数?根据我的经验,人们使用“字段”和“列”作为同义词。鉴于选择列表中的名称没有改变,你可能只会得到返回行数的差异。
由于相同的表,输入数据和查询,大小和结果集的内容应该是一样的,不管查询计划或服务器版本。除非您对结果强加一个顺序,否则结果集的顺序可能会不同,但在任何DBMS中都是合法的。
如果您收到的结果集,你可能应该联系IBM技术支持不同的尺寸。至少有一个结果集是错误的,错误的结果总是严重的。
尽管提示可能有助于提高性能,并且'运行更新统计信息(使用适当的选项集)'的标准建议通常会有所帮助,但当底层数据稳定时,索引的存在与否都不应改变结果集。 (如果数据发生了变化,也有各种各样的问题和并发症的担心。)
我能想到的只有两种解释这一点:
我知道你不希望发布的SQL和表定义,但是这并使它很难诊断。
我觉得真正帮助,我们需要看到的SQL,表结构,或许一些示例内容是什么? – toolkit 2008-11-20 13:35:50