Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 性能:删除vs FORALL_Sql_Oracle_Plsql - Fatal编程技术网

Sql 性能:删除vs FORALL

Sql 性能:删除vs FORALL,sql,oracle,plsql,Sql,Oracle,Plsql,什么有更好的性能 删除如下内容: DELETE FROM users WHERE attr IN (SELECT * FROM TABLE(attrs)); FORALL i IN 1..attrs.COUNT DELETE FROM users WHERE attr = attrs(i); 或者像这样: DELETE FROM users WHERE attr IN (SELECT * FROM TABLE(attrs)); FORALL i IN 1

什么有更好的性能

删除如下内容:

    DELETE FROM users WHERE attr IN (SELECT * FROM TABLE(attrs));
    FORALL i IN 1..attrs.COUNT DELETE FROM users WHERE attr = attrs(i);  
或者像这样:

    DELETE FROM users WHERE attr IN (SELECT * FROM TABLE(attrs));
    FORALL i IN 1..attrs.COUNT DELETE FROM users WHERE attr = attrs(i);  
在这种简单的情况下,单次删除更快更合适。OP可能忽略了一个简单的删除就可以同时删除多条记录


因为all DELETE比FOR循环中的DELETE好,它避免了在PL/SQL和SQL之间切换上下文。事实上,对于所有使用批量绑定的用户来说,单次删除速度更快,而且对数据库友好!FORALL DELETE通过保存PL/SQL引擎和SQL引擎之间的上下文切换,比FOR循环中的DELETE更好,因为FORALL使用批量绑定—您所说的单次删除是什么意思?从用户中删除,其中SELECT*FROM TABLEattrs中的attr是一次删除?是的,David。单个DML语句,以删除所有记录。@OracleUser您应该将其添加为答案。