delete应该比Insert速度慢,因为它有一个检索子句.既然code已经设置为主键,检索速度以经是最快了,只能从SQL的编译时间上去考虑了.
把这条删除语言单独放在一个ADOQuery中(这个ADOQuery不作其它事),Prepared设为true,可以加快速度.因为这样可以作到一次编译,多次使用.

解决方案 »

  1.   

    试一试这样作:
    不使用prepared,每次动态生成SQL:
    delete test where code in (code1,code2,code2...)
    (用真正的值代替coden).注意不要太长,一次应该可以删除几百条.还可以试一试使用prepared,把上述语句写成:
    delete test where code in (:code1,:code2,:code3...)
    (编个程序去生成这个语句吧),让ADOQuery有几百个参数,使用时用一个循环去赋值,如果实际的值比参数少,就把剩余的参数赋成同一个值.不过我没试过让ADOQuery有几百个参数,你可以试一试.
      

  2.   

    "删十万条数据"速度一定会很慢,因为你做删除操作时,oracle会在每一条记录上加上标记,如果10万条就做10万个标记,目的是如果做rollback操作的话再取消删除操作,所以如果删除记录非常多的话会恨慢.