select m.id,t.`id`
from cz_zz_xxxb_view m
inner join (
select w.`id` from cc_zz_wt_view w
where INSTR(w.`conten`,'土地')
)t
on t.id = m.id
w 是问题表 1w多数据
m 表是关联的 100多w 的数据
on 使用的都是 索引关联
可是最后还会走 ALL 没有使用索引是为什么??
已解决, 是两个表的关联字段,编码不统一导致的
找到两张表的外键关系就可以了
oracle索引是有自动优化的,有子查询的时候,如果走all的效率高,就不会走索引
应该是这句话
select w.`id` from cc_zz_wt_view w where INSTR(w.`conten`,'土地')
如果在查询语句当中有函数的话,不会用到索引的
应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。
首先你确认下
select m.id,t.id
from cz_zz_xxxb_view m
where
t.id = ''测试ID'
是否全表查询(ALL)
如果是的话,就说明跟 inner join的m表没有关系。这个时候需要重新考虑下 t表的PK设计是否合理。
oracle支持函数式索引,可以在w表上建函数式索引应该就比较快了
已解决, 是两个表的关联字段,编码不统一导致的