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您应该将其添加为答案。