Informix SQL 查询:返回不同结果的两个相似查询
Posted
技术标签:
【中文标题】Informix SQL 查询:返回不同结果的两个相似查询【英文标题】:Informix SQL query: Two similar queries returning different results 【发布时间】:2008-11-20 13:33:10 【问题描述】:我有一个返回一组行的 Informix SQL 查询。它针对我们一直在开发的新版本网站进行了轻微修改,我们的 QA 注意到新版本返回了不同的结果。经过调查,我们发现两个查询之间的唯一区别在于返回的字段数量。
FROM、WHERE 和 ORDER BY 子句是相同的,SELECT 部分中的列名不影响结果。只是字段的数量导致了问题。
有什么想法吗?
【问题讨论】:
我认为真正有帮助的是,我们需要查看 SQL、表结构,也许还有一些示例内容? @toolkit:我完全理解你的观点,但坦率地说,我相信 SQL 在这里真的不那么重要——正如我所说的查询很大,但没什么好写的 此类问题所需的标准信息包括您使用的 IDS 版本和运行它的平台。版本应该分三部分,比如11.50.FC1。这三个部分都很重要。 【参考方案1】:添加--+ ORDERED
join-order 指令通过允许您每次都以可预测的顺序获得结果来解决问题。
链接指向指令如何工作的描述 http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.sqls.doc/sqls1144.htm
使用 ORDERED 连接顺序指令 强制优化器连接表 或视图的顺序 出现在 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;
【讨论】:
【参考方案2】:Informix SQL 引擎根据我们要检索的列使用表上的索引。在检索不同的列时,我们使用不同的索引,因此以不同的顺序获得结果。
【讨论】:
【参考方案3】:我认为“字段”是指输出数据的行数?根据我的经验,人们使用“字段”和“列”作为同义词。鉴于选择列表中的名称没有更改,您可能只是在返回的行数上有所不同。
给定相同的表、输入数据和查询,无论查询计划或服务器版本如何,结果集的大小和内容都应该相同。结果集的顺序可以不同,除非您对结果进行排序,但这在任何 DBMS 中都是合法的。
如果您获得不同大小的结果集,您可能应该联系 IBM 技术支持。至少有一个结果集是错误的,错误的结果总是很严重的。
虽然提示可能有助于提高性能,并且“运行 UPDATE STATISTICS(使用适当的选项集)”的标准建议通常会有所帮助,但当基础数据稳定时,无论是否存在索引都不应改变结果集。 (如果数据发生变化,则需要担心各种问题和并发症。)
【讨论】:
【参考方案4】:对此我只能想到两种解释:
-
正在使用聚合函数,例如 COUNT(DISTINCT 列),或
选择的其他列来自外部联接的表
我了解您不希望发布 SQL 和表定义,但这确实难以诊断。
【讨论】:
以上是关于Informix SQL 查询:返回不同结果的两个相似查询的主要内容,如果未能解决你的问题,请参考以下文章
Informix SQL / 在另一个查询中重用存储过程的结果
Informix SQL 11.5 将查询结果存储在具有动态名称的文件中