|
登录注册 |
☦ 上海交通大学论坛 > 数据库 > 浏览当前帖子 | 手机版 关闭左侧栏 |
优化Visual Foxpro |
【返回本版】 【发表帖子】 【回复帖子】 | 浏览量 9685 回帖数 0 |
seagame 等级 ★ 楼主 发表于 2012/5/25 2:28:54 编 辑 |
||
深入了解,Rushmore技术 Rushmore技术是一种快速高效访问记录集合的数据访问技术。Ru shmore技术最大限度地利用了压缩索引的优点,而又不受限于只使用 这种索引。在最简单的形式下,Rushmore根据已有索引使用FOR子句指 定某一范围的记录来加速单表命令的执行。Rushmore也可以加速□□ 一些命令的操作,如LOCATE和INDEX。 1.在表中使用Rushmore 您可以根据所涉及表的数目,使用Rushmore技术优化对数据的访 问。若要使用Rushmore ,请选择下列选项 .若要访问单表数据,请使用FOR子句。 .若要访问多个表的数据,请使用SELECT-SQL命令。 访问单表时,可以在任何FOR子句出现的地方使用Rushmore。访问 多表时,SELECT-SQL查询将取代所有的Rushmore。SQL确定如何优化查 询并自动执行此项工作。您不需要打开表或索引,如果SQL决定需要索 引,它会创建临时索引供自己使用。 2.带有FOR子句的潜在可优化命令 AVERAGE BLANK BROWSE CALCULATE CHANGE COPY TO COPY TO AR RAY COUNT DELETE DI SPLAY EDIT EXPRORT TO INDEX JOIN WITH L ABEL LIST LOCATE RECALL REPLACE REPLAC E FROM ARRAY REPORT SCAN SORT TO SUM TOTAL TO 3.优化Rushmore表达式 Rushmore技术取决于FOR子句中是否出现基本可优化表达式。一 个基本可优化表达式可以是整个表达式,也可以是表达式的一部分。 您也可以对基本表达式进行各种组合构成复杂的可优化表达式。 (1)创建基本可优化表达式 基本可优化表达式一般是下面两种形式 elndex relOp eExpr eExpr relOp eIndex 基本可优化表达式具有以下特点 .eIndex必须精确地匹配用以构造索引的表达式,且不包含别名 。 .eExpr是任意表达式,可以包含变量和□□不相关表中的字段。 .relOp是下列关系操作符之一:<、>、=、<=、>=、<>、#、==或 !=。您也可以使用IS- NULL()、BETWEEN()或INLIST()函数。 若要在可优化表达式中使用BETWEEN或INLIST,选择下列格式 BETWEEN(eIndex,eExpr,eExpr)或INLIST(eIndex,eExpr [,...]) 若要在可优化SQL表达式中使用BETWEEN或IN,选择下列格式 eIndex BETWEEN eExpr AND eExpr或eIndex IN (eExpr [,...]) 可以组合可优化表达式,并且可以对生成的复杂可优化表达式再 次组合。 (2)组合基本可优化表达式 如果FOR表达式具有基本可优化表达式的各种特征,那么可以在FO R子句基础上组合简单或复杂表达式以提高数据检索速度。基本达表 式可能是可优化的,您可以使用AND、OR或NOT 逻辑操作符组合这些基 本表达式,以构成可优化的复杂FOR子句表达式。表1 (3)组合复杂表达式 您可以组合复杂表达式,以创建全部可优化、部分可优化或不可 优化的更加复杂的表达式。然后再组合这些更复杂的表达式以创建全 部或部分可优化的,或者根本不可优化的表达式。下表说明了组合这 些复杂表达式的结果。这些规则也适用于用圆括号分组的表达式。表 2 4.关闭Rushmore 尽管要关闭Rushmore的情况很少,但有时确实需要关闭。当您发 出一个使用Rushmore的命令时,Visual FoxPro立即决定哪些记录符合 FOR子句表达式的要求,然后再由此命令操作这些匹配记录。 ●若要对单条命令关闭Rushmore,使用NOOPTI-MIZE子句。 例如,下面的LOCATE命令就没有被优化 LOCATE FOR DueDate<{01/01/95}NOOPTI-MIZE ●使用SET OPTIMIZE命令,可以在全局范围内关闭或启用所有能 受益于Rushmore命令的Rushmore功能。 5.无Rushmore的操作 在下列几种情况下数据检索操作不使用Rushmore优化技术 ●当Rushmore不能优化潜在可优化命令中的FOR子句时。 ●当可从Rushmore中受益的命令包含WHILE子句时。 ●当内存较少时,数据检索将继续进行,但不被优化。 优化Visual FoxPro性能 您可以用几种方法优化Visual FoxPro的性能:添加更多的内存用 于动态内存分配;对文件的打开和关闭进行管理;设置环境变量以及编 写性能更好的代码等。尤其可以通过以下这些方面的改进来增强性能 ●使用内存 创建窗口、菜单、屏幕、内存变量和□□对象时,需要占用内存 。要想尽可能地提高系统性能,那么应只在必要时创建对象,并且在完 成对象操作后清除它们,以释放内存供Visual FoxPro使用。SYS(101 6)可以返回窗口、菜单、屏幕、内存变量、打开的表等控制对象所占 用的内存数量。 ●打开和关闭文件 在应用程序中,频繁地打开和关闭文件将使执行速度变得缓慢。V isual FoxPro提供327 67个工作区,因此可以在应用程序中让频繁使 用的表一直打开。 ●废止状态显示 当使SET TALK命令为ON时,Visual FoxPro可能达不到它的最快操 作速度。若要关闭输出命令结果的功能,请使用下面的代码 SET TALK OFF SET DOHISTORY命令只适用于临时调试,因为它会导致程序执行速 度降低。若要关闭DOI STORY功能,使用以下代码 SET DOHISTORY OFF ●使用名称表达式代替宏替换 如果用名称表达式取代宏替换,将极大地增强程序性能。例如,给 cFile变量指定一个值,则用cFile创建的名称表达式比宏替换更快。 cFile="CUST" USE &cFile &&宏替换:慢 USE (cFile) &&名称表达式:较快,建议使用 ●管理对象属性 如果在程序循环外使用对象属性,Visual FoxPro将更加有效地运 行。例如,下面的代码示例显示了两种不同的方法,创建几个具有相同 宽度的按钮。 代码 FOR i=2 TO THISFORM.optGrp.ButtonCount;THISFORM.optGrp.B uttons(i).Width =; THISFORM.optGrp.Buttons(1).Width ENDFOR nWidth=THISFORM.optGrp.Buttons(1).WidthFOR i=2 TO THISFO RM.optGrp.ButtonCou nt THISFORM.optGrp.Buttons(1).Width = nWidth ENDFOR ●管理SQL命令的性能 在SELECT-SQL查询中,以下情况会导致性能降低并产生意外的结 果 a.没有指定一个完整的联接条件,而将两个表包含到一个查询中 。 b.联接含有空字段的表。 提高性能的一般技巧 下面的几条经验可能会对您的编程工作有所帮助 1.将输出发送到任何非最顶层窗口都比输出到顶层窗口输出慢。 使输出在窗口后面滚动可以说是最糟糕的工作方式; 2.FOR...ENDFOR循环比DO WHILE...ENDDO循环快; 3.INSERT SQL比APPEND BLANK再加上RE-PLACE要快得多,尤其是 对于多用户环境下建立了索引的表来说更是如此; 4.从多个字段复杂数据时,SCATTER TO ARRAY要比SCATTER MEMVA R快; 5.如果要将很多记录追加到已有索引的表中,先移去索引再追加 记录,然后重建索引或许会更快些; 6.如果经常使用某一索引排序,则定期地按此排序方式对表排序 可以提高性能; 7..CDX文件可以提高多用户性能,因为更新一个.CDX文件比更新 多个.IDX文件速度快; 8.当一个表打开时相关的.CDX索引也打开,而且当关键字值更改 时它也随之更新。如果您使用了很多索引标识,这将显著地降低添加 记录的速度 |
1 |
论坛帮助 会员认证删帖申请 联系我们 |