【发布时间】:2015-10-08 00:08:40
【问题描述】:
我习惯于告诉我的 sql 语句我希望它在 MSSQL 中使用哪个索引。但似乎这在 DB2 中并没有以同样的方式工作。
此语句在 MSSQL 中对我有效,但在 Db2 中无效。 :
SELECT ACT.COMPANY,ACT.ACCT_UNIT,ACT.ACTIVITY,ACT.ACTIVITY_GRP,ACT.ACCT_CATEGORY,ACT.TRAN_AMOUNT,ACT.DESCRIPTION as ACT_DESCRIPTION,
AP.VENDOR,AP.INVOICE,AP.PO_NUMBER,AC.DESCRIPTION as AC_DESCRIPTION
FROM
ACTRANS ACT WITH (INDEX(ATNSET12)),
APDISTRIB AP WITH (INDEX(APDSET9)),
ACACTIVITY AC WITH (INDEX(ACVSET1))
WHERE
ACT.OBJ_ID = AP.ATN_OBJ_ID AND
ACT.ACTIVITY = AC.ACTIVITY AND
ACT.ACCT_CATEGORY != 'CAPEX'
谢谢!
【问题讨论】:
-
(?) 可能与 stackoverflow.com/questions/14878164/… 重复,上一个问题是指“选择性”和/或提醒您拥有当前/相关统计数据
-
索引(或任何其他)提示不是标准 SQL。此外,告诉数据库如何完成它的工作并不是一个好主意。
-
删除子句,DB2 优化器应该足够聪明,可以在有用时自行选择索引。并开始使用显式
JOIN运算符,而不是where子句中过时的隐式连接