select a.* from talbe1 a
where instr(a.col1,(select b.col2 from b,c where b.recno = c.brecno and b.col4= 'R23' and rownum < 2 ) > 0 )
该语句怎么样利建立索引来优化,或者别的办法?,(主要是table1表的查询优化(怎样用上索引?) )
where instr(a.col1,(select b.col2 from b,c where b.recno = c.brecno and b.col4= 'R23' and rownum < 2 ) > 0 )
该语句怎么样利建立索引来优化,或者别的办法?,(主要是table1表的查询优化(怎样用上索引?) )
SELECT *
FROM TALBEL A
WHERE EXISTS
(SELECT 1
FROM b
WHERE EXISTS (SELECT 1 FROM B.RECNO = C.BRECNO AND B.COL4 = 'R23')
AND INSTR(A.COL1, B.COL2) > 0);
a {
recno ,col1(存放b中col1的值,如果有多个用,分开),col2,col3
}
其实不止这些列
arecno01 ,[b2,b22],a3
....
b{
recno ,col1,col2,col3
}
其实不止这些列
brecno01,b2,e,w
brecno02,b22,s,f
brecno03 ,b222,d,s
....c{
recno ,col1(对应b中的recno),col2,col3
crecno01 ,brecno01,w,r
crecno02 ,brecno01,q,
rcrecno03,brecno02,q,rw
}
其实不止这些列
每个表数据都是上10万的
a {
recno ,col1(存放b中col1的值,如果有多个用,分开),col2,col3
}
其实不止这些列
arecno01 ,[b2,b22],a3
....
b{
recno ,col1,col2,col3
}
其实不止这些列
brecno01,b2,e,w
brecno02,b22,s,f
brecno03 ,b222,d,s
.... c{
recno ,col1(对应b中的recno),col2,col3
crecno01 ,brecno01,w,r
crecno02 ,brecno01,q,
rcrecno03,brecno02,q,rw
}
其实不止这些列 select a.* from talbe1 a
where instr(a.col1,(select b.col1 from b,c where b.recno = c.brecno and b.col4= 'R23' and rownum < 2 ) > 0 )
select a.* from a
where instr(a.col1,(select c.recno from b,c where b.recno = c.brecno and b.col3= 'R23' and rownum < 2 ) > 0 )
说明:每个表数据都是上10万的
至于表的结构 ,有很多列,但是我用到的过滤条件的列就象我所描述的,就是我要查找a中的数据,但是我现在只知道b的col3的值(比如象我所说的:R23),根据这个值和等值连接(和c表b.recno = c.brecno)查找到c中的c.recno的值,多条记录的话只要一条即可(rownum < 2);如果c.recno的值存在a.col1中(instr(a.col1,c.recno) > 0 )则把a表记录取出来
a {
recno ,col1(存放c中col1的值,如果有多个用,分开),col2,col3 (recno,col1,col2,col3都是varchar2型 ,recno(主键),col1,col2,col3都是列名)
}
其实不止这些列
arecno01 ,[crecno01,crecno02],a3 ,e
arecno02 ,rcrecno03,a3 ,g
....
b{
recno ,col1,col2,col3 (recno(主键),col1,col2,col3都是varchar2型 recno,col1,col2,col3都是列名)
}
其实不止这些列
brecno01,b2,e,w
brecno02,b22,s,f
brecno03 ,b222,d,R23
.... c{
recno ,col1(对应b中的recno),col2,col3
crecno01 ,brecno01,w,r
crecno02 ,brecno01,q,
rcrecno03,brecno02,q,rw
}
其实不止这些列 (recno(主键),col1(对应b中的recno),col2,col3都是varchar2型 recno,col1,col2,col3都是列名)
而且你还用了一些oracle的内置函数,那就效率就更难说了,不要认为oracle自己提供的内置函数就一切Ok,根本不是这样的,函数的运行本身也是需要资源和转换时间的。我就遇到过多表关联查询时,where子句中to_char转换date型字段为字符串,然后跟参数比对的情况,数据量超过60万(我遇到的),查询速度就突然变慢。将对字段的to_char去掉,修改为对参数的to_date处理后,查询速度就特别快了。