Delphi7查询SQL Server2008的效率问题

sunruiwing11111 2018-05-27 02:49:34
最近在写一个程序是关于sql2008数据查询的,其中遇到了几个问题 ,无从下手,请大神指点
我是通过TADOConnection组件与SQL Server建立联系,通过TADOQuery组件进行数据访问,编写SQL语言进行查询,数据库的 表很简单,只有一个表,表中有ID、时间戳、以及20多个字符串项,每项不超过10个字符,数据库大概有15G左右。数据库表不是我建立的,而且已经应用无法更改。
我的目的是将数据库中的有异常变化的数据取出,然后判断其属于什么异常变化。
我目前是每次取出1W条数据(不敢添加查询条件,因为异常变化的数据是不定时出现的,有时候一查就是老半天),然后通过我写的算法逐条进行判断。
遇到的问题:
1、单次查询1W条数据时只需要140毫秒左右的时间,但连续取时(也就是取数-算法判断-取数-算法判断时)几次过后取数时间就变为2-3秒。不知道原因在哪,我是通过ID进行查询的。
2、查询的时候就程序假死,网上查了半天,说是应该另开线程进行(我现在是写在timer控件里的),还没试不知道能不能解决。
有没有更效率的方式去查询呢?
3、执行算法的时间有点长,且每次CPU占用率都在50%-80%左右,不知道原因,我是从TADOQuery里面读一条算一条,然后next下一条再算。查了一下,说是应该先放在数组中,还没试,不知道是不是因为这个原因。
以上就是我遇到的几个问题,烦请各位大神帮我解惑一下。
...全文
2237 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
BlueStorm 2018-06-20
  • 打赏
  • 举报
回复
1.如果你查询数据不怕影响到别人使用数据库,一个select命令就能把你所需要的结果全部查到了,根本不需要写什么Delphi程序,反正判断一个记录是否异常你是有判断条件的。 2.如果一定要用delphi写程序来判断,先确定一下是否服务器慢还是程序慢。直接执行一下程序发到服务器的sql命令,如果没有出现慢的情况,就证明不是服务器的问题而是程序问题。 3.如果是程序问题,建议用sdac试试,不要再用ado了。这个论坛里面还有很多人在用ado、bde这类古董,实在令人困惑。
千人千市 2018-06-04
  • 打赏
  • 举报
回复
建议数据导出至自己的库中,同意楼上的分析
jjpweb 2018-05-28
  • 打赏
  • 举报
回复
1.把自己的算法屏蔽,只循环取数,确定卡在哪 2.如果卡在自己的算法,timer开始加入 timer.enabled:=false;结束加入timer.enabled:=true;
victor_yang 2018-05-28
  • 打赏
  • 举报
回复
导到自己的数据库里想怎么做都可以,嘿嘿
liups 2018-05-27
  • 打赏
  • 举报
回复
建议使用一个专门的存储过程完成此事!
lyhoo163 2018-05-27
  • 打赏
  • 举报
回复
大数据的浏览,没有捷径。获取的字段越少越好(快)。
liups 2018-05-27
  • 打赏
  • 举报
回复
引用 4 楼 liups 的回复:
建议使用一个专门的存储过程完成此事!
楼主的需求我和以前碰到的一个问题类似:有一个商业版的业务软件,需要对其数据进行某种统计,显然不能更改原始数据。解决方案:在sql server增加一个存储过程来统计,这样不会对原始功能有任何影响,而且效率绝对没有问题。
sunruiwing11111 2018-05-27
  • 打赏
  • 举报
回复
引用 1 楼 doloopcn 的回复:
数据表的变化如果需要很高效率、最好实时的要求的,一般不应该在程序中设置,建议在数据库中建立存储过程,利用数据更新触发事件通知程序 用你的算法的话,我是数据库管理员,我会直接将你的IP DROP了
数据库不更新的,都是已经记录下来的数据,而且数据库我没有权限改的= =。
sunruiwing11111 2018-05-27
  • 打赏
  • 举报
回复
数据库不更新的,都是已经记录下来的数据,而且数据库我没有权限改的= =。
doloopcn 2018-05-27
  • 打赏
  • 举报
回复
数据表的变化如果需要很高效率、最好实时的要求的,一般不应该在程序中设置,建议在数据库中建立存储过程,利用数据更新触发事件通知程序 用你的算法的话,我是数据库管理员,我会直接将你的IP DROP了
xiaocongzhi 2018-05-27
  • 打赏
  • 举报
回复
你搞个缓存队列之类的,把一次取出来的数据放在缓存里 把缓存里的数据处理完 再去读取数据库

2,497

社区成员

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

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