精华内容
下载资源
问答
  • 数据结构 1800题》

    热门讨论 2012-12-27 16:52:03
    13.以下哪个数据结构不是数据类型(D )【中山大学 1999 一、3(1分)】 A.栈 B.广义表 C.有向图 D.字符串 14.以下数据结构中,(A )是非线性数据结构【中山大学 1999 一、4】 A.树 B.字符串 C.队 ...
  • 数据结构(C++)有关练习题

    热门讨论 2008-01-02 11:27:18
    注:要用面向对象的方法来设计程序,每个通讯录是一个类的实例; 3、从终端读入字符集大小为n(即字符的个数),逐一输入n个字符和相应的n个权值(即字符出现的频度),建立哈夫曼树,进行编码并且输出。 ...
  • 时间还是充足的...,于是自己整理下本系列知识点的上章内容。 <p><img alt="moiunt-Fuji" src="https://img-blog.csdnimg.cn/img_convert/9163d187b3ed0250bfb92d452d1cceb5.png" /></p> 以下为正文: ...
  • <div><p>最近,在工作中遇到了MySQL中如何存储长度较的字段类型问题...于是花了一周时间抽空学习了一下,并且记录下来。 <p>MySQL大致的逻辑存储结构在这篇文章中有介绍,做为基本概念:...
  • 这个月正式这个程序来计算加班工资并上传,一共1000多条记录,运行上传,花了很长时间程序还是没有响应,开始以为是程序有问题,调试后发现程序本身并没有失去响应,只是速度非常慢,测试了一下,更新10记录平均...

    因工作需要,用EXCEL+ADO+SQL SERVER编写了一个加班工资录入的小程序。写好后进行了一些测试,因测试数据不多,没发现有什么问题。这个月正式用这个程序来计算加班工资并上传,一共1000多条记录,运行上传,花了很长时间程序还是没有响应,开始以为是程序有问题,调试后发现程序本身并没有失去响应,只是速度非常慢,测试了一下,更新10条记录平均一下要3秒,这样1000多条记录的话差不多要5分钟,于是开始查找原因。

    先简单说一下程序工作的方法,因要连接到SQL SERVER数据库,所以上传附件也不是太能说明问题,而且最终发现解决问题的关键也不需要上传附件。我的程序使用ADO建立一个connection对象cnGzb和一个recordset对象rsGzb,通过SQL语句将数据读入rsGzb,加班信息存放在一张工作表中,遍历每条加班数据,将加班工资更新rsGzb中相应的记录(使用recordset的filter属性根据工号进行筛选),最后用recordset的updatebatch方法更新SQL Server数据库表中的相应字段。

    首先我打算先找出哪些代码影响了速度,我先把觉得可能影响速度的代码注释掉,再运行,最终发现影响速度的是recordset的filter属性,可能是filter的速度比较慢而的引起的,于是就想是否能找到一个更快的查找方法,发现ADO中还有一个find方法。修改代码为find后速度还是没有太大的改变,郁闷...

    怎么办呢?突然想起以看过一遍关于优化SQL查询的文章,里面对SQL查询优化有一个比较详细的说明,特别比较了在已建立索引的字段上进行查询与未建立索引字段上查询速度的差别,想起一句话,“所有快速查找都是基于排序的”,于是马上修改代码,添加对rsGzb中的工号字段进行排序代码(rsGzb.Sort = "gh ASC"),运行,出错(运行时错误3251:当前提供程序不支持排序或过滤所必须的界面),查看sort属性的帮助,发现里面有一条说明“此属性要求将 CursorLocation 属性设置为 adUseClient。”,于是添加代码(cnGzb.CursorLocation = adUseClient),再运行。太爽了,1秒内就完成了操作,太有成就感了!\(^O^)/

    没想到排序可以把查找的数据提高到这么恐怖的程度。太厉害了。

    马上想到把这个经过到坛子里来发贴,和大家分享一下。

    为了能很好的表达这个意思,也让大家感觉一下前后的差别,于是想到利用recordset的save方法把recordset保存到文件中,这样就可以脱开SQLSERVER,大家就可以在没有数据库连接的情况下进行测试了。修改代码,保存recrodset。完成。

    进行测试,把排序的代码注释掉,运行。咦,不到1秒就完成了,怎么回事,难道注销的代码行搞错了,反复检查发现排序的代码的确是注释掉了,反复测试发现似乎排序对程序的运行影响不大,那到底是怎么回事呢?

    想了很久终于明白了,提高速度的那行代码是(cnGzb.CursorLocation = adUseClient),

    CursorLocation属性是一个connect和recordset对象都有的一个属性,该属性表示如何存储查询结果,默认值为AdUseServer。若不对recordset的CursorLocation进行设置,则recordset将继承connection对象的CursorLocation值。

    在默认情况下recordset对象对于查询的结果由OLE DB提供程序或数据库来管理,简单理解为recordset的查询结果存放于服务器端,而且处理这些查询结果的过程要通过OLE DB或数据库来完成而不是通过ADO来完成,这时候ADO更象一个任务派发者,指挥OLE DB或数据库来完成工作,这样一来,一个命令下达后,影响这个命令执行的因素就很多了,如OLE DB或数据库的响应速度,网络连接等等,我当时由于数据库在其他的服务器上,因为可能网络连接引起的速度变慢可以也是其中的一个因素。当把CursorLocation设置为adUseClient时,查询结果直接存放于recordset的临时表中(本地),由ADO直接对recordset进行操作,这时前面的影响因素就没有了,处理的速度直接取决于本机速度。这就是我所碰到的问题的关键。

    把这个经过记录下来是为了和大家分享一下我从发现问题到分析问题到解决问题的过程,可能对大家有所帮助。

    下面就是程序中的那几句关键代码(第1名和第3句在这儿的作用相同,可以只写一句)

    cnGzb.CursorLocation = adUseClient

    Set rsGzb = New ADODB.Recordset

    rsGzb.CursorLocation = adUseClient 'CursorLocation对于关闭的recordset对象可读可写,对于打开的recordset对象只读

    rsGzb.Open sSqlCommand, cnGzb, adOpenKeyset, adLockBatchOptimistic

    [本帖最后由 lbpp 于 2009-6-5 12:52 编辑]

    展开全文
  • 网络工程师知识问答精华 ...设计成512K*16的存储器,存储器的数据线是16,所以需要16块存储芯片并联才成(位扩展)。容量512K所以需要512/64=8片串联达到要求(字扩展),总共需要多少芯片呢?16*8=128片芯片。
  • 2009达内SQL学习笔记

    2010-02-10 19:46:58
    ORDER BY子句中使用的列将是为显示所选择的列,但是实际上并不一定这样,非检索的列排序数据是完全合法的。 为了按个列排序,列名之间逗号分开。 2、支持按相对列位置进行排序。 输入 SELECT prod_id,...
  • ❄ BaseTime,基础时间(也称:基点时间、原点时间、纪元时间),有默认值(2020年),是毫秒时间戳(是整数,.NET是DatetTime类型),作用是:生成ID时的系统时间与基础时间的差值(毫秒数)作为生成ID的时间戳。...
  • c语言编写单片机技巧

    2009-04-19 12:15:17
    答:对于复杂而开发时间紧的项目时,可以采用C语言,但前提是要求对该MCU系统的C语言和C编译器非常熟悉,特别注意该C编译系统所能支持的数据类型和算法。虽然C语言是最普遍的一种高级语言,但不同的MCU厂家其...
  • 会计理论考试题

    2012-03-07 21:04:40
    23.如果把C盘某个文件夹中的一些文件复制到C盘的另外一个文件央中,在选定文件后,若采用拖放操作,可以___B___目标的方法。 A、直接拖至 B、Ctrl十拖至 C、Alt十拖至 D、单击 24.Windows98中的磁盘的根文件夹是...
  • 比如可能是上亿条数据,如果把索引节点都放在内存中是不现实的,我们希望索引不占用太的内存空间,那只能把一部分索引放在内存,一部分放在磁盘,等需要的时候再把磁盘的索引载入...
  • (题目还给出了一系列的数据,比如:站点数总共为5000万,IP地址有1000万,等等) 3.5.1 找出给定字符串对应的序号 3.5.2 找出第k大的数字所在的位置。写一段程序,找出数组中第k大小的数,输出数所在的位置。例如...
  • 日期类型 date 7字节 用于存储表中的日期和时间数据,取值范围是公元前4712年1月1日至公元9999年12月31日,7个字节分别表示世纪、年、月、日、时、分和秒 二进制数据类型 row 1~2000字节 可变二进制数据,在具体...
  • 单片机期末考试题目及答案详解

    热门讨论 2009-06-23 10:30:30
    24.在机通讯中,有关第9数据位的说明中,正确的是 A.接收到的第9数据位送SCON寄存器的TB8中保存 B.帧发送时使用指令把TB8位的状态送入移位寄存器的第9位 C.发送的第9数据位内容在SCON寄存器的RB8中预先准备...
  • 又如有些朋友的机器是升了级的,过去老机器上的一些部件如内存舍不得抛弃,装在新机器上照,可是由于老内存的速度限制,往往使新机器必须降低速度来迁就它,从而降低了整机的性能,极大地影响了整体的运行速度。...
  • 2004-2010软考程序员真题

    热门讨论 2012-09-27 12:33:00
     A)科学计算 B)实时控制 C)数据处理 D)辅助设计  6、I/O接口位于  A)总线和设备之间 B)CPU和I/O设备之间C)主机和总线之间 D)CPU和主存储器之间  7、计算机硬件能直接识别和执行的只有  A)高级语言 B)符号语言 C...
  • 共有m条数据,其中代表我们拟合出来的方程到真实值距离的平方,平方的原因是因为可能有负值,正负可能会抵消 前面有系数2的原因是下面求梯度是对每个变量求偏导,2可以消去 实现代码: # 计算代价函数 def ...
  • 支持报警短信转发,支持个接收手机号码,可设定发送间隔,比如即时发送或者6个小时发送一次所有的报警信息,短信内容过,自动拆分多条短信。 支持报警邮件转发,支持个接收邮箱,可设定发送间隔,比如即时发送...
  • 例如,仅当你发出查询或MySQLd必须返回大的结果行时MySQLd才会分配更内存。 # 该变量之所以取较小默认值是一种预防措施,以捕获客户端和服务器之间的错误信息包,并确保不会因偶然使用大的信息包而导致内存溢出...
  • A: cFos/cFosSpeed 都是多国语言版本, 只不过在安装时 cFosSpeed 会问你要用什么语言来安装. 那着到底 cFos 安装之后, 还能改语言吗? 答案是确定的. 首先进入 cFos 安装目录, 找到其中叫做 cfos.ini 档案, 所有的...
  • 率值就越准确,但闸门时间则没测一次频率的间隔就越。闸门时间越 短,测的频率值刷新就越快,但测得的频率精度就受影响本文。数字频率计是 数字显示被测信号频率的仪器,被测信号可以是正弦波,方波或其它...
  • 这里的IDE设备包括了IDE硬盘和IDE光驱,第一、第二组设备是指主板上的第一、第二根IDE数据线,一般来说靠近芯片的是第一组IDE设备,而主设备、从设备是指在一IDE数据线上接的两个设备,大家知道每根数据线上可以接...
  • 是不是会耗费太时间,资源。所以我们应该尽早的返回真实的 IP 地址,减少查询过程,也就是 DNS 缓存。浏览器获取到 IP 地址后,一般都会加到浏览器的缓存中,本地的 DNS 缓存...

空空如也

空空如也

1 2 3 4
收藏数 74
精华内容 29
关键字:

计算1000条数据要用多长时间