楼主: wadekobe9

求助!一句SQL语句运行不了,各位大侠帮忙看下如何优化

[复制链接]
论坛徽章:
115
生肖徽章:狗
日期:2007-01-06 21:14:12马上有车
日期:2014-03-06 16:45:08马上加薪
日期:2014-05-09 12:27:582014年世界杯参赛球队: 英格兰
日期:2014-07-03 13:10:44青年奥林匹克运动会-竞技体操
日期:2014-09-10 15:30:57马上有钱
日期:2014-10-31 13:56:48美羊羊
日期:2015-03-04 14:48:582015年新春福章
日期:2015-03-06 11:57:31懒羊羊
日期:2015-04-23 19:26:10金牛座
日期:2015-09-17 08:21:44
11#
发表于 2011-1-10 10:18 | 只看该作者
原帖由 wadekobe9 于 2011-1-10 10:14 发表
开发的说是去掉A中没有x的部分

啥意思?
能清晰地描述一下逻辑吗?

使用道具 举报

回复
论坛徽章:
0
12#
 楼主| 发表于 2011-1-10 10:32 | 只看该作者

回复 #11 atgc 的帖子

实际的SQL是这样的

select t.reg_bus_ent_id,t.ent_name,t.ent_sort,t.industry_co,t.dom_district,t.reg_cap,t.est_date,t.ent_state,
       t.reg_bus_ent_id,t.ent_name,t.ent_sort,t.industry_co,t.dom_district,t.reg_cap,t.est_date,t.ent_state,'3'
from reg_bus_ent t
where ent_state in (2,3) and reg_bus_ent_id not in (select s_pripid from f_a_dominv where flag<>'6')

使用道具 举报

回复
论坛徽章:
0
13#
 楼主| 发表于 2011-1-10 10:38 | 只看该作者
他的意思是要去掉select s_pripid from f_a_dominv where flag<>'6'这段搜索出来的结果,大侠,可否改为not exists ,小弟不太会用not exists

使用道具 举报

回复
论坛徽章:
115
生肖徽章:狗
日期:2007-01-06 21:14:12马上有车
日期:2014-03-06 16:45:08马上加薪
日期:2014-05-09 12:27:582014年世界杯参赛球队: 英格兰
日期:2014-07-03 13:10:44青年奥林匹克运动会-竞技体操
日期:2014-09-10 15:30:57马上有钱
日期:2014-10-31 13:56:48美羊羊
日期:2015-03-04 14:48:582015年新春福章
日期:2015-03-06 11:57:31懒羊羊
日期:2015-04-23 19:26:10金牛座
日期:2015-09-17 08:21:44
14#
发表于 2011-1-10 10:43 | 只看该作者
原帖由 wadekobe9 于 2011-1-10 10:32 发表
实际的SQL是这样的

select t.reg_bus_ent_id,t.ent_name,t.ent_sort,t.industry_co,t.dom_district,t.reg_cap,t.est_date,t.ent_state,
       t.reg_bus_ent_id,t.ent_name,t.ent_sort,t.industry_co,t.dom_district,t.reg_cap,t.est_date,t.ent_state,'3'
from reg_bus_ent t
where ent_state in (2,3) and reg_bus_ent_id not in (select s_pripid from f_a_dominv where flag'6')


reg_bus_ent_id 和 s_pripid 是什么关系啊?
能清晰地解释一样逻辑吗?用数据来解释,谢谢

使用道具 举报

回复
论坛徽章:
115
生肖徽章:狗
日期:2007-01-06 21:14:12马上有车
日期:2014-03-06 16:45:08马上加薪
日期:2014-05-09 12:27:582014年世界杯参赛球队: 英格兰
日期:2014-07-03 13:10:44青年奥林匹克运动会-竞技体操
日期:2014-09-10 15:30:57马上有钱
日期:2014-10-31 13:56:48美羊羊
日期:2015-03-04 14:48:582015年新春福章
日期:2015-03-06 11:57:31懒羊羊
日期:2015-04-23 19:26:10金牛座
日期:2015-09-17 08:21:44
15#
发表于 2011-1-10 10:44 | 只看该作者
原帖由 wadekobe9 于 2011-1-10 10:38 发表
他的意思是要去掉select s_pripid from f_a_dominv where flag'6'这段搜索出来的结果,大侠,可否改为not exists ,小弟不太会用not exists

先要把逻辑搞清楚

使用道具 举报

回复
论坛徽章:
115
生肖徽章:狗
日期:2007-01-06 21:14:12马上有车
日期:2014-03-06 16:45:08马上加薪
日期:2014-05-09 12:27:582014年世界杯参赛球队: 英格兰
日期:2014-07-03 13:10:44青年奥林匹克运动会-竞技体操
日期:2014-09-10 15:30:57马上有钱
日期:2014-10-31 13:56:48美羊羊
日期:2015-03-04 14:48:582015年新春福章
日期:2015-03-06 11:57:31懒羊羊
日期:2015-04-23 19:26:10金牛座
日期:2015-09-17 08:21:44
16#
发表于 2011-1-10 10:56 | 只看该作者
还有,请告知一下两张表得记录数,已经加上条件后,符合条件得记录数

使用道具 举报

回复
论坛徽章:
115
生肖徽章:狗
日期:2007-01-06 21:14:12马上有车
日期:2014-03-06 16:45:08马上加薪
日期:2014-05-09 12:27:582014年世界杯参赛球队: 英格兰
日期:2014-07-03 13:10:44青年奥林匹克运动会-竞技体操
日期:2014-09-10 15:30:57马上有钱
日期:2014-10-31 13:56:48美羊羊
日期:2015-03-04 14:48:582015年新春福章
日期:2015-03-06 11:57:31懒羊羊
日期:2015-04-23 19:26:10金牛座
日期:2015-09-17 08:21:44
17#
发表于 2011-1-10 11:00 | 只看该作者
你提供的信息不准确,我只能给你大致写一下了,要注意
reg_bus_ent_id 和 s_pripid 的关系,多对多?一对多,一对一,一对多?
还有select s_pripid from f_a_dominv where flag<>'6'记录数有多少?
T.ent_state in (2,3) 有多少?
两表各自总记录数有多少?
索引是怎样的,很多问题
只有知道了这些问题后,才能正确地写出SQL,而不是单纯的“用 not exists 好不好“



select /*+ leading(t) use_hash(t2) all_rows full(T) */
       t.reg_bus_ent_id,t.ent_name,t.ent_sort,t.industry_co,t.dom_district,t.reg_cap,t.est_date,t.ent_state,
       t.reg_bus_ent_id,t.ent_name,t.ent_sort,t.industry_co,t.dom_district,t.reg_cap,t.est_date,t.ent_state,'3'
from   reg_bus_ent t,(select /*+ FULL(f_a_dominv) */ s_pripid from f_a_dominv where flag<>'6') T2
where  T.ent_state in (2,3)
and    T.reg_bus_ent_id=t2.s_pripid(+)
and    t2.s_pripid is null

使用道具 举报

回复
论坛徽章:
0
18#
 楼主| 发表于 2011-1-10 11:05 | 只看该作者
好的,好的,我去在和他们好生沟通下,把逻辑和业务都理清了来,谢谢大侠的帮忙

使用道具 举报

回复
论坛徽章:
0
19#
 楼主| 发表于 2011-1-10 11:08 | 只看该作者
感谢大侠,太感谢了,我拿着这个语句在去试试,和他们讨论讨论,谢谢

使用道具 举报

回复
论坛徽章:
5
生肖徽章2007版:鸡
日期:2008-01-02 17:35:53祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-03-01 11:08:29SQL大赛参与纪念
日期:2011-04-13 12:08:172012新春纪念徽章
日期:2012-01-04 11:49:54
20#
发表于 2011-1-10 17:38 | 只看该作者
select a,b,c,d,e from aaa
where e in(2,3) and and a not in (select x from bbb where flag<>'6')

-- 根据你的数据量分析,你这个SQL 基本上没有优化的空间了。如果要速度快的话,建议用并行。

select /*+ parallel(aaa, nums) */ a,b,c,d,e from aaa
where e in(2,3) and a not in (select /*+ parallel(bbb, nums) */ x from bbb where flag<>'6')

nums 的值可根据你的数据库Server的CPU数和Server的的负载决定。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表