ADO操作数据库效率问题

ding1188 2009-07-28 05:30:11
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左右吧),上面的语句执行花费的时间比较多。有什么办法可以提高删除语句的执行效率吗?谢谢了!
...全文
101 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zaodt 2009-07-29
  • 打赏
  • 举报
回复
学会使用数据库不难,但学精它可不是一件简单的事!


尤其是效率问题,可不是简单的几句话就能解决问题!


就像你这个问题,就有可能很多种情况引起:

1、Where 中的 列 建立了索引了吗?

2、为什么主键用字符型?字符串的比较很慢,这是基本的常识。

////////////////////////

另外,你只给出了一行程序,不知道前后程序是如何的。


从这行程序看,你只删除了一条记录,因为 LogId 为主键。


猜测,你可能使用循环删除多条记录。


如果是这样的话,那慢也正常的;


你可以试试看,一次删除一批数据,这样只要发送一次 SQL 语句就行了。
尘雨 2009-07-29
  • 打赏
  • 举报
回复
你把这行代码前后的一些代码,也帖出来。可能在你执行这个delete之前,还有其他查询操作。

先贴出代码再分析。
zhaohongbo83 2009-07-29
  • 打赏
  • 举报
回复
应该是你对这个表还有其他操作吧!不然删除一条数据没有那么慢的。

还有不要用2L说的truncate ,truncate table 是删除表的所有数据,但是如果你的表有delete insert 操作特别频繁的话,建议在不用这个表的时候,将数据备份一下,将表truncate一下降低表的高水位线,这样操作能快一点
teleinfor 2009-07-28
  • 打赏
  • 举报
回复
使用Command对象的Excute方法,不要使用Connection对象的Excute方法。试试看效果。
ding1188 2009-07-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 oyljerry 的回复:]


数据库分析器效率肯定比ADO等要高一点,毕竟ADO还要转换一层。
你可以增加一些信息,看具体什么语句等执行比较耗时间,然后再来分析优化
[/Quote]
我刚才屏蔽了上面的代码,速度就上来了。我想应该就是这条代码引起的,可又找不到原因。
ding1188 2009-07-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tttyd 的回复:]
删除有多慢?
我测试用20W条记录,使用上述语句操作,删除的并不慢啊。
帮顶
[/Quote]
一条记录4,5秒
oyljerry 2009-07-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ding1188 的回复:]
引用 1 楼 oyljerry 的回复:
换用更高效率的数据库,或者分批处理记录

刚才用查询分析器删除记录,速度很快。因该不是数据库的问题~
[/Quote]
数据库分析器效率肯定比ADO等要高一点,毕竟ADO还要转换一层。
你可以增加一些信息,看具体什么语句等执行比较耗时间,然后再来分析优化
雪影 2009-07-28
  • 打赏
  • 举报
回复
删除有多慢?
我测试用20W条记录,使用上述语句操作,删除的并不慢啊。
帮顶
ding1188 2009-07-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 oyljerry 的回复:]
换用更高效率的数据库,或者分批处理记录
[/Quote]
刚才用查询分析器删除记录,速度很快。因该不是数据库的问题~
onlyliu 2009-07-28
  • 打赏
  • 举报
回复
删除用 truncate
oyljerry 2009-07-28
  • 打赏
  • 举报
回复
换用更高效率的数据库,或者分批处理记录

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧