select * from para_adj p where p.pn=p.nei_ne_pn (pn 和nei_ne_pn是表para_adj中的字段)
需要pn 和nei_ne_pn同一行的值相同的数据。现在的查询时间要7秒多钟,请问怎样才可以提高查询速度呀?
请各位帮帮忙,多谢!
解决方案 »
- oracle 动态拼接语句并返回查询结果集
- oracle一下情况记日志吗?
- 紧急求助:Oracle11G+VS2003(VB.net)的字符过大问题
- 谁能给我解释一下这个小程序是什么意思?
- 两条update语句如何合并为一条语句?
- 9i,登陆OEM,以SYSDBA身份登陆,随便输什么用户名和密码都能进入!为什么呀??
- ORACLE 新用户权限分配问题! 请兄弟们指导! 急急急!
- 想针对分组字段 求 分组字段>2的结果,大家有何良策?
- win 2003+oracle 9i oci_connect() ora-01031
- Oracle错误2153
- 关于 wmsys.wm_concat 对于 数字的 用法
- 一条sql求救,比较急
把select * from para_adj p where p.pn=p.nei_ne_pn 中的*换成字段
select pn,pni_ne_n, .... from para_adj p where p.pn=p.nei_ne_pn
/--分别在para_adj表中给pn和nei_ne_pn建立索引,请再查询并希望知道增加索引后的运行时间。create index idx_para_adj1 on para_adj (pn);create index idx_para_adj2 on para_adj (nei_ne_pn);
SELECT p.city_id,p.ne_omc_id,p.cell_name,p.nei_cell_name,p.vendor_name,p.nei_vendor_name,p.pn,p.nei_ne_pn
FROM para_adj p WHERE 1=1 AND Exists (SELECT 1 FROM para_adj b WHERE p.pn=b.nei_ne_pn)
速度是达到了比较理想的值,但是查询结果是不对的。
INNER JOIN para_adj B ON A.ID=B.ID
WHERE A.pn=B.nei_ne_pn这样速度绝对快...,结帖..给分吧..... ~..~
select /*+ use_nl(b, a) */ a.*
from para_adj A,
(
select rowid rid
from para_adj
where pn = nei_ne_pn
) B
where a.rowid = b.rid
--看看后面这个结果何。--最好把你的执行计划帖出来
我测试过你的sql也要7-8秒钟。(原本:select p.city_id,p.ne_omc_id,p.cell_name,p.nei_cell_name,p.vendor_name,p.nei_vendor_name
from para_adj p where p.pn=p.nei_ne_pn)
也许真的没办法啦。
select * from para_adj p where exist(select * from para_adj j where j.nei_ne_pn=p.pn);
create index idx_para_adj_2 ON para_adj(pn, nei_ne_pn);
这个复合索引刚好合适,只需要走index fast full scan就可以了。能帖出执行计划不?