【问题标题】:Can I use with(index(xxx)) in my SQL with DB2我可以在带有 DB2 的 SQL 中使用 with(index(xxx))
【发布时间】: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 子句中过时的隐式连接

标签: sql indexing db2


【解决方案1】:

嗯,选择索引或其他访问数据的方式应该是数据库系统的任务,而不是用户的任务。数据分布、数据库技术、内存和磁盘等可用资源可能会发生变化,但由于数据库系统会找出最佳访问计划,您的查询仍应以最佳方式工作。

如果您仍然认为这应该受到影响,那么DB2 offers several features to do so:数据库配置参数或更好的特定于会话的环境设置、优化配置文件、维护统计信息的不同方式……

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    • 2011-07-19
    • 2023-01-26
    相关资源
    最近更新 更多