行のセットを返す Informix SQL クエリがあります。これは、私たちが取り組んできたサイトの新しいバージョン用にわずかに変更されており、QA は新しいバージョンが異なる結果を返すことに気付きました。調査の結果、2 つのクエリの違いは、返されるフィールドの数だけであることがわかりました。
FROM、WHERE、および ORDER BY 句は同一であり、SELECT 部分の列名は結果に影響しませんでした。問題を引き起こしたのはフィールドの数だけでした。
何か案は?
join-order ディレクティブを追加--+ ORDERED
すると、毎回予測可能な順序で結果を取得できるようになり、問題が修正されます。
リンクは、ディレクティブがどのように機能するかの説明に移動します 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;
Informix SQL エンジンは、取得する列に基づいてテーブルのインデックスを使用します。異なる列を取得するとき、異なるインデックスを使用していたため、異なる順序で結果を取得していました。
「フィールド」とは、出力データの行数を意味していると思いますか? 私の経験では、人々は「フィールド」と「列」を同義語として使用しています。選択リストの名前が変更されていないことを考えると、返される行数の違いだけが得られたと考えられます。
テーブル、入力データ、クエリが同じであれば、クエリ プランやサーバーのバージョンに関係なく、結果セットのサイズと内容は同じになります。結果に順序を課さない限り、結果セットの順序付けは異なる場合がありますが、それはどの DBMS でも正当です。
結果セットのサイズが異なる場合は、おそらく IBM テクニカル サポートに連絡する必要があります。結果セットの少なくとも 1 つが間違っており、間違った結果は常に深刻です。
ヒントはパフォーマンスを向上させる可能性があり、通常は「UPDATE STATISTICS を (適切なオプション セットを使用して) 実行する」という標準的なアドバイスが役立ちますが、基になるデータが安定している場合、インデックスの有無によって結果セットが変更されることはありません。(データが変更されている場合、さまざまな問題や複雑な問題が発生します。)
これについては、次の 2 つの説明しか思いつきません。
SQL とテーブルの定義を公開したくないのは理解できますが、それでは診断が難しくなります。