strSql.Format(_T("delete from %s where LogId = '%s'"),OriginalBase.m_sTable,sDeleteArray[i]->GetAt(0));
m_ConnectionPtr->Execute((_bstr_t)strSql,NULL,AdoNS::adCmdText);
如上代码删除数据库中的记录,LogId为表的主键。当表中的记录多(40W左右吧),上面的语句执行花费的时间比较多。有什么办法可以提高删除语句的执行效率吗?谢谢了!

解决方案 »

  1.   

    数据库分析器效率肯定比ADO等要高一点,毕竟ADO还要转换一层。
    你可以增加一些信息,看具体什么语句等执行比较耗时间,然后再来分析优化
      

  2.   

    使用Command对象的Excute方法,不要使用Connection对象的Excute方法。试试看效果。
      

  3.   

    你把这行代码前后的一些代码,也帖出来。可能在你执行这个delete之前,还有其他查询操作。先贴出代码再分析。
      

  4.   

    学会使用数据库不难,但学精它可不是一件简单的事!
    尤其是效率问题,可不是简单的几句话就能解决问题!
    就像你这个问题,就有可能很多种情况引起:1、Where 中的 列 建立了索引了吗?2、为什么主键用字符型?字符串的比较很慢,这是基本的常识。////////////////////////另外,你只给出了一行程序,不知道前后程序是如何的。
    从这行程序看,你只删除了一条记录,因为 LogId 为主键。
    猜测,你可能使用循环删除多条记录。
    如果是这样的话,那慢也正常的;
    你可以试试看,一次删除一批数据,这样只要发送一次 SQL 语句就行了。
      

  5.   

    应该是你对这个表还有其他操作吧!不然删除一条数据没有那么慢的。还有不要用2L说的truncate ,truncate table 是删除表的所有数据,但是如果你的表有delete insert 操作特别频繁的话,建议在不用这个表的时候,将数据备份一下,将表truncate一下降低表的高水位线,这样操作能快一点