您的查询没有返回任何内容,因为执行引擎正在使用此特定应用程序 (Sage BusinessVision) 错误引用的索引,您必须解决此问题。
解释:
您遇到的问题与 BusinessVision 创建表 SALES_HISTORY_DETAIL的索引索引的方式有关。此表的 PK(索引 key0)位于NUMBER和RECNO列上。
BusinessVision 普遍索引的详细信息
以下是索引与 BV 一起使用的方式的解释:
如果您运行能够使用索引的查询,您将获得更好的性能。不幸的是,普遍计算NUMBER的索引的方式并不能单独工作。
--wrong way for this table
Select * from SALES_HISTORY_DETAIL WHERE NUMBER = '0000125199'
--return no result
由于普遍处理索引的方式,您应该不会得到任何结果。解决方法是您必须查询 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普遍使用索引并且您没有得到任何结果,要修复该查询只需添加(并且 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