这个sql 怎么优化
建议您在以下的几个列中,根据列选择过滤性比较好的列做一个组合索引,除了红线标注的除外,并提供一下MSG_DT时间列这个条件能选中的数据的过滤性(提供选中数据占比)
hint改成 USE_HTAB(0) 尝试一下是否有效果
use_htab(0)加这个hint看下
从计划估算看MSG_STATUS的过滤性很好,可以先确认一下这个列的过滤性,如果不错,可以创建这个列为第一列加上其他共有条件,比如MSG_DT,C_TRX_STATUS,MSG_TO_DEPT的索引。如果MSG_STATUS的过滤性较差可以确认ACCT_KIND和C_UNIT_CODE列的过滤性,如果不错就让OR分开处理,分别走这些列的索引进行过滤,避免CSCN2。可以通过对列进行分组确认列的过滤性(SELECT COUNT(*),XXX FROM TABLE GROUP BY XXX ORDER BY 1 DESC)
/*+ ENABLE_HASH_JOIN(0) ENABLE_DIST_IN_SUBQUERY_OPT(2) */
这几个列建个索引试试