ob执行时如何选择的索引

我有条语句,查询条件为 where col1=’’ and col3 in’()’ and col4>’’ and col4<’’ and col5 in (’’,’’,’’) order by col2 desc,理论上应该是命中索引 (col3,col1,col4,col5,col2)最好,col3为机构编号比较有区分度,col4为日期,col2为时间, 但explain看,执行的是(col1, col2, col4, col3),并且需要额外的filter去查询col3、col4、col5,想问下为什么会这样选择?

1 个赞

通过添加hint方法指定下命中索引 (col3,col1,col4,col5,col2),然后生成执行计划和当前的执行计划进行比较一下

1 个赞

你可以看看执行计划
explain extended sql 大概就知道 索引是怎么走的了

1 个赞

默认的执行计划只有一个filter ([pay_jn1.ORG_ID = 2100176095*], [cast (pay_jnI. DATE, DATETIME (-1, -1)) < 21. [pay_JAI STATE IN (‘S’, ‘A’, ‘F’)], [cast (pay_J1 .DATE, DATETIME (-1, -1)) > 21),
另一个索引执行计划为filter (nil), sort _keys ([pay_jn].TIME, DESC]) 与filter ([pay_jn1. STATE IN (‘S’, *A’, E)]),

1 个赞

explain extended sql 把执行计划保存在文本里 发一下

1 个赞

学习了!

:clap: :clap: