免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2052 | 回复: 7
打印 上一主题 下一主题

请教一个删除数据的效率问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-08-25 10:43 |只看该作者 |倒序浏览
假设TABLENAME --  TMP,UNIQUE INDEX -- TIME
有两个sql 如下:
delete from tmp
where rowid in (select rowid from tmp where time < sysdate -10 );

delete from tmp where time < sysdate -10 ;

请问一下,哪一个执行的速度更快?
如果TIME不是UNIQUE INDEX呢?
      
谢谢!

论坛徽章:
0
2 [报告]
发表于 2005-08-25 16:49 |只看该作者

请教一个删除数据的效率问题

删除数据的时候到底是用rowid快呢,还是用INDEX快呢?

能不能有人指点一下迷津!

论坛徽章:
0
3 [报告]
发表于 2005-08-25 19:03 |只看该作者

请教一个删除数据的效率问题

感觉是第二个快,
因为第一个涉及到集合操作。
涉及到集合操作的都会慢下来。
并且对于表中的每个记录都会进行集合操作

论坛徽章:
0
4 [报告]
发表于 2005-08-26 07:59 |只看该作者

请教一个删除数据的效率问题

如果是select * from tmp
where rowid in (select rowid from tmp where time < sysdate -10 );

select * from tmp where time < sysdate -10 ;
比较,应该是第2个快,因为第一个比第二个多一个查询,用的是NESTED LOOPS,但是删除数据的时候,是不是用ROWID会比一般的删除快?

论坛徽章:
0
5 [报告]
发表于 2005-08-26 09:11 |只看该作者

请教一个删除数据的效率问题

能直接用rowid当然快了

但是,在本例中,你还是通过index获得rowid的,所以你的第一种做法等于是绕了个湾,速度不可能比第二个快的

论坛徽章:
0
6 [报告]
发表于 2005-08-26 10:04 |只看该作者

请教一个删除数据的效率问题

尤其是用in的时候,in ()中的数据很大的时候。

论坛徽章:
0
7 [报告]
发表于 2005-08-29 12:08 |只看该作者

请教一个删除数据的效率问题

多谢指点,本以为删除数据的时候,由于ORCLE的本身特性,用查找出来的ROWID做删除会比较快。
根据楼上几个大哥的回复,看来主要浪费时间的是在查询的部分。

- - !

论坛徽章:
0
8 [报告]
发表于 2005-08-29 13:34 |只看该作者

请教一个删除数据的效率问题

search by rowid is the fastest
the problem is that you do not normally what the rowid is.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP