从表中删除记录快,还是选择记录快?

[复制链接]
查看11 | 回复4 | 2011-12-28 08:44:39 | 显示全部楼层 |阅读模式
情况是这样的,一张表中的数据有些是错误的,我现在要取出正确的数据。
有两种方式:一、根据判断条件,删除错误记录;二、根据判断条件,查询出正确记录。
如果判断条件简单的话,两种方式都好办。不过现在判断条件比较多,也比较复杂。如果删除数据的话,用的是OR,而选取正确数据的话,用的是AND。
不知道用哪种方式效率高一点?
回复

使用道具 举报

千问 | 2011-12-28 08:44:39 | 显示全部楼层
其实这个问题的核心是,在WHERE子句中AND和OR的区别。
如果是DELETE(删除)的话,是不是只要条件中的一个条件符合就可以删除?而用SELECT(选择),是不是要每个条件都符合才能选取?
如果是这样的话,应该用OR的效率高一点。
回复

使用道具 举报

千问 | 2011-12-28 08:44:39 | 显示全部楼层
如果条件中使用了索引,那么使用ADN比较快,如果使用了OR会抑制索引的使用
回复

使用道具 举报

千问 | 2011-12-28 08:44:39 | 显示全部楼层
本来想看看执行计划的,可是DELETE的好像没有?
回复

使用道具 举报

千问 | 2011-12-28 08:44:39 | 显示全部楼层
最初由 ShingU 发布
[B]本来想看看执行计划的,可是DELETE的好像没有? [/B]

SQL> create user test identified by test default tablespace users ;
用户已创建
SQL> grant dba to test ;
授权成功。
SQL> conn test/test ;
已连接。
SQL> create table t(id number,name varchar2(10)) ;
表已创建。
SQL> insert into t values(1,'11') ;
已创建 1 行。
SQL> commit ;
提交完成。

SQL> set autot on ;
SQL> select * from t ;
ID NAME
---------- ----------
1 11

Execution Plan
----------------------------------------------------------
0SELECT STATEMENT Optimizer=CHOOSE
10 TABLE ACCESS (FULL) OF 'T'


Statistics
----------------------------------------------------------

0recursive calls

0db block gets

7consistent gets

0physical reads

0redo size
425bytes sent via SQL*Net to client
503bytes received via SQL*Net from client

2SQL*Net roundtrips to/from client

0sorts (memory)

0sorts (disk)

1rows processed
SQL> delete t where id =1 ;
已删除 1 行。

Execution Plan
----------------------------------------------------------
0DELETE STATEMENT Optimizer=CHOOSE
10 DELETE OF 'T'
21 TABLE ACCESS (FULL) OF 'T'


Statistics
----------------------------------------------------------

0recursive calls

2db block gets

7consistent gets

0physical reads
272redo size
615bytes sent via SQL*Net to client
521bytes received via SQL*Net from client

3SQL*Net roundtrips to/from client

1sorts (memory)

0sorts (disk)

1rows processed
SQL>
这样删除是不是可以看到了?
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行