我有一个返回一组行的Informix SQL查询。对于我们一直在研究的网站的新版本略有修改,我们的QA注意到新版本会返回不同的结果。经过调查,我们发现两个查询之间的唯一区别在于返回的字段数。
FROM,WHERE和ORDER BY子句是相同的,SELECT部分中的列名称不会影响结果。只是引起问题的字段数量。
有什么想法吗?
答案 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)
我只能想到两个解释:
我知道您不希望发布SQL和表定义,但这确实难以诊断。