実行エンジンがこの特定のアプリケーション (Sage BusinessVision) によって誤って参照されているインデックスを使用しているため、クエリは何も返しません。この問題を回避する必要があります。
説明:
あなたが抱えている問題は、BusinessVisionがテーブル SALES_HISTORY_DETAILのインデックスインデックスを作成した方法に関連しています。このテーブルの PK (インデックス キー 0) は、列NUMBERとRECNOの両方にあります。
BusinessVision のパーベイシブ インデックスの詳細
index が BV で機能する方法の説明は次のとおりです。
インデックスを使用できるクエリを実行すると、パフォーマンスが向上します。残念ながら、パーベイシブがNUMBERのこのインデックスを計算する方法は、単独では機能しません。
--wrong way for this table
Select * from SALES_HISTORY_DETAIL WHERE NUMBER = '0000125199'
--return no result
pervasive がインデックスを処理する方法のため、結果が得られないはずです。回避策は、PK を機能させるために、PK のすべてのフィールドに対してクエリを実行する必要があることです。この場合、 RECNOは 1 から 999 までのレコードを表すため、RECNO > 0のすべてのレコードを指定できます。
--right way to use index key0
Select * from SALES_HISTORY_DETAIL WHERE NUMBER = '0000125199' and RECNO > 0
これにより、そのテーブルで期待した結果が得られ、パフォーマンスが向上したインデックスを使用できます。
テーブル SALES_ORDER_DETAIL でも同じ動作になることに注意してください。
質問を返します。
詳細を確認するために実行したクエリは、インデックスを使用する代わりにテーブル スキャンを実行しました。
--the way you used in your question
Select * from SALES_HISTORY_DETAIL WHERE NUMBER LIKE '%0000125199%'
その場合、Like キーワードのためではなく、先頭の「%」のために機能します。それを削除すると、エンジンが奇妙なインデックスを使用して最適化するため、そのクエリは機能しません。
元のクエリでは、d.NUMBER = h.NUMBER pervasive を参照しているため、インデックスを使用して結果が得られないため、そのクエリを修正するには、単に追加します (および RECNO > 0)
Select h.ord_no
from sales_history_header h
INNER JOIN sales_history_detail d
ON d.NUMBER = h.NUMBER and RECNO > 0
WHERE d.COMMENTS LIKE '%3838CS%'
sage-businessvision pervasive-sql