大批量数据查询SQL优化问题

vmile925 2009-07-16 09:33:10
select t1.m,t1.n
from t1,t2
where t1.a=t2.a(两表在a上均有索引)
and (t2.c=p_code or p_code is null)(c字段上上有索引)
。。。。

t1表大概有几百万条数据,t2表几十万条数据,这个sql是过程中其中一个最慢的,p_code是个参数,如果不为空则按t2.c=p_code 查询,请大家看看哈,我应该向什么方向优化,先看哪些方面?
t2表虽然走了在a字段上的索引,但因表的行排序跟这个索引不同,所以i/o等待时间比较长
...全文
187 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
vmile925 2009-07-16
  • 打赏
  • 举报
回复
c字段是单独索引,重复值很多 几十万条数据,只有几个值,执行计划,我只能看他耗费那一项,后面那个基数、字节什么的是什么意思?
zuzuou 2009-07-16
  • 打赏
  • 举报
回复
关键看t2.c的选择度有多高,也不知道你所说的c字段上面有索引,指的单个字段的索引还是跟其他字段一起的复合索引。如果t2.c的重复值很少,那么就在t2上面建个c,a的复合索引。
另外,统计信息对于执行计划很重要,把这两个表的统计信息再重新收集一次,然后再看看执行计划
vmile925 2009-07-16
  • 打赏
  • 举报
回复
现在没有,可能是因为数据量大的原因,t1表没有走索引,是全表扫描。
能给个sql优化的大体方向吗?
suncrafted 2009-07-16
  • 打赏
  • 举报
回复
有执行计划吗
慢到什么程度?

17,088

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧