查看: 3133|回复: 17

求助sql语句优化

[复制链接]
shl1129 该用户已被删除
发表于 2009-7-20 15:13 | 显示全部楼层 |阅读模式
select * from tb2 a where a.gmsfhm in (select b.gmsfhm from tb1 b)

100万条数据

现在要做insert 操作,求助这样的语句如何优化,在线等
论坛徽章:
126
ITPUB元老
日期:2007-07-04 17:27:50会员2007贡献徽章
日期:2007-09-26 18:42:10现任管理团队成员
日期:2011-05-07 01:45:08优秀写手
日期:2015-01-09 06:00:14版主7段
日期:2015-07-16 02:10:00
发表于 2009-7-20 15:21 | 显示全部楼层
先提供该语句的explan plan, 把2表的数据量是多少说明一下!

使用道具 举报

回复
shl1129 该用户已被删除
 楼主| 发表于 2009-7-20 15:28 | 显示全部楼层
关于select in有什么好的优化方式

使用道具 举报

回复
论坛徽章:
23
会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44生肖徽章2007版:猴
日期:2009-07-21 13:33:18ITPUB十周年纪念徽章
日期:2011-11-01 16:21:152012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:14
发表于 2009-7-20 15:28 | 显示全部楼层
到底是优化这个select还是优化insert?子查询出来的数据量有多大?

使用道具 举报

回复
论坛徽章:
23
会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44生肖徽章2007版:猴
日期:2009-07-21 13:33:18ITPUB十周年纪念徽章
日期:2011-11-01 16:21:152012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:14
发表于 2009-7-20 15:29 | 显示全部楼层
select in可以改写成表join的方式,in的写法不好做优化

使用道具 举报

回复
论坛徽章:
23
会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44生肖徽章2007版:猴
日期:2009-07-21 13:33:18ITPUB十周年纪念徽章
日期:2011-11-01 16:21:152012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:14
发表于 2009-7-20 15:30 | 显示全部楼层
还有,你这个sql当前的执行计划,两个表的数据量,这个查询会返回的数据量都应该列出来一下,就写个sql问怎么优化,人家很难回答你

使用道具 举报

回复
shl1129 该用户已被删除
 楼主| 发表于 2009-7-20 15:30 | 显示全部楼层
SQL> select * from table(dbms_xplan.display());

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
----------------------------------

| Id  | Operation             |  Name               | Rows  | Bytes |TempSpc| Co
st  |  TQ    |IN-OUT| PQ Distrib |

--------------------------------------------------------------------------------
----------------------------------

|   0 | SELECT STATEMENT      |                     |  7122K|   570M|       | 63

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
497 |        |      |            |

|   1 |  HASH JOIN SEMI       |                     |  7122K|   570M|   129M| 63
497 | 38,02  | P->S | QC (RAND)  |

|   2 |   TABLE ACCESS FULL   | HJXX_RYZPXXB        |  7122K|   434M|       | 61
367 | 38,01  | P->P | HASH       |

|   3 |   INDEX FAST FULL SCAN| PKI_SZ_JBXX_GMSFHM  |  4195K|    80M|       |
60 | 38,00  | S->P | HASH       |


PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
----------------------------------


Note: cpu costing is off, PLAN_TABLE' is old version

11 rows selected.

使用道具 举报

回复
shl1129 该用户已被删除
 楼主| 发表于 2009-7-20 15:32 | 显示全部楼层
SQL> select count(rowid) from HJXX_RYZPXXB;

COUNT(ROWID)
------------
     7251591

SQL> select count(rowid) from SZ_JBXX;

COUNT(ROWID)
------------
      731441

使用道具 举报

回复
shl1129 该用户已被删除
 楼主| 发表于 2009-7-20 15:37 | 显示全部楼层

回复 #6 lx_csut 的帖子

麻烦帮我看下,谢谢

使用道具 举报

回复
论坛徽章:
23
会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44生肖徽章2007版:猴
日期:2009-07-21 13:33:18ITPUB十周年纪念徽章
日期:2011-11-01 16:21:152012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:14
发表于 2009-7-20 15:39 | 显示全部楼层
a表这么大,a.gmsfhm 上没有索引?

使用道具 举报

回复

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

本版积分规则 发表回复

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