2008-11-20 105 views
1

我有一個返回一組行的Informix SQL查詢。對於我們一直在努力的網站的新版本,它進行了一些修改,我們的QA發現新版本返回不同的結果。經過調查,我們發現兩個查詢之間的唯一區別在於返回的字段數量。Informix SQL查詢:兩個類似的查詢返回不同的結果

FROM,WHERE和ORDER BY子句是相同的,在SELECT部分​​中的列名不影響結果。這只是導致問題的領域數量。

任何想法?

+0

我覺得真正幫助,我們需要看到的SQL,表結構,或許一些示例內容是什麼? – toolkit 2008-11-20 13:35:50

回答

1

的Informix的SQL引擎採用基於我們要檢索的列的表的索引。當檢索不同的列時,我們使用不同的索引,因此以不同的順序獲得結果。

2

添加--+ 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; 
0

我認爲,由「字段」你的意思是輸出數據的行數?根據我的經驗,人們使用「字段」和「列」作爲同義詞。鑑於選擇列表中的名稱沒有改變,你可能只會得到返回行數的差異。

由於相同的表,輸入數據和查詢,大小和結果集的內容應該是一樣的,不管查詢計劃或服務器版本。除非您對結果強加一個順序,否則結果集的順序可能會不同,但在任何DBMS中都是合法的。

如果您收到的結果集,你可能應該聯繫IBM技術支持不同的尺寸。至少有一個結果集是錯誤的,錯誤的結果總是嚴重的。

儘管提示可能有助於提高性能,並且'運行更新統計信息(使用適當的選項集)'的標準建議通常會有所幫助,但當底層數據穩定時,索引的存在與否都不應改變結果集。 (如果數據發生了變化,也有各種各樣的問題和併發症的擔心。)

0

我能想到的只有兩種解釋這一點:

  1. 正在使用聚合函數,如COUNT( DISTINCT列),或
  2. 所選擇的其他列的表中的外層加入

我知道你不希望發佈的SQL和表定義,但是這並使它很難診斷。