1

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

FROM、WHERE 和 ORDER BY 子句是相同的,SELECT 部分中的列名不影响结果。只是导致问题的字段数量。

有任何想法吗?

4

4 回答 4

2

添加--+ ORDEREDjoin-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;
于 2008-11-20T13:35:25.400 回答
1

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

于 2008-11-20T13:46:25.877 回答
0

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

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

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

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

于 2008-11-21T23:33:32.120 回答
0

我只能想到两种解释:

  1. 正在使用聚合函数,例如 COUNT(DISTINCT column),或
  2. 选择的其他列来自外部联接的表

我了解您不希望发布 SQL 和表定义,但这确实使诊断变得困难。

于 2008-11-25T02:29:31.373 回答