SET OPTIMIZE 命 令

SET OPTIMIZE 命 令 - 图1设置是否使用 Rushmore 优化技术

语 法

SET OPTIMIZE ON | OFF

参 数 描 述

O N

SET OPTIMIZE 命 令 - 图2SET OPTIMIZE 命 令 - 图3SET OPTIMIZE 命 令 - 图4默 认 值 启 用 Rushmore 优 化

OFF

SET OPTIMIZE 命 令 - 图5禁 止 Rushmore 优 化

说 明

SET OPTIMIZE 命 令 - 图6SET OPTIMIZE 命 令 - 图7SET OPTIMIZE 命 令 - 图8SET OPTIMIZE 命 令 - 图9SET OPTIMIZE 命 令 - 图10Visual FoxPro 使用一种叫 Rushmore 的技术来优化数据的检索 支持 FOR 子句的表命令可以使用 Rushmore 技术提高性能 当发出一条可优化命令时 Rushmore 决定哪些记录与 FOR 条件相匹配 发出的命令是在表中与 Rushmore 记录集相匹配的记录上执行的

SET OPTIMIZE 命 令 - 图11SET OPTIMIZE 命 令 - 图12SET OPTIMIZE 命 令 - 图13SET OPTIMIZE 命 令 - 图14SET OPTIMIZE 命 令 - 图15SET OPTIMIZE 命 令 - 图16很少有情况需要禁止 Rushmore 优化 如果一条可从 Rushmore 优化中受益的命令修改了查询索引关键字时 Rushmore 记录集可能变得过时 这时 为确保从表中得到最新的信息 应 禁 止 Rushmore 优化

SET OPTIMIZE 命 令 - 图17SET OPTIMIZE 命 令 - 图18SET OPTIMIZE 命 令 - 图19SET OPTIMIZE 命 令 - 图20可用 SET OPTIMIZE 在全局范围内启用或禁止 Rushmore 技术 每条使用 Rushmore

的命令都有一个

下 面 的 命 令 可 用

命 令

NOOPTIMIZE 子句 可以用它来禁止 Rushmore

Rushmore 来 优 化 其 运 行 性 能

优化开关

AVERAGE

BLANK

BROWSE

CALCULATE

CHANGE

COPY TO

COPY TO ARRAY

COUNT

DELETE

DISPLAY

EDIT

EXPORT

INDEX

LABEL

LIST

LOCATE

RECALL

REPLACE

REPLACE FROM ARRAY SORT

请 参 阅

REPORT SUM

SCAN TOTAL

INDEX , SET ORDER

S E T O R D E R 命 令

SET OPTIMIZE 命 令 - 图21指定表的主控索引文件或标识

语 法

SET ORDER TO

[ nIndexNumber | IDXIndexFileName | [TAG] TagName [OF

CDXFileNam e ]

[IN n W orkArea | cTableAlias ] [ASCENDING | DESCENDING]]

参 数 描 述

SET OPTIMIZE 命 令 - 图22SET OPTIMIZE 命 令 - 图23nIndexNumbe r

指 定 主 控 索 引 文 件 或 标 识 的 编 号

nIndexNumber 指 的 是 在

USE 或 SET

INDEX 中 列 出 索 引 文 件 的 顺 序 号

首 先 按 它 们 在 USE 或

SET INDEX 中

SET OPTIMIZE 命 令 - 图24SET OPTIMIZE 命 令 - 图25SET OPTIMIZE 命 令 - 图26SET OPTIMIZE 命 令 - 图27SET OPTIMIZE 命 令 - 图28SET OPTIMIZE 命 令 - 图29出 现 的 顺 序 为 打 开 的 .ID X 文 件 编 号 随 后 按 创 建 顺 序 为 结 构 .CDX 文件 中 的 索 引 标 识 如 果 存 在 的 话 SET OPTIMIZE 命 令 - 图30 编 号 最 后 按 创 建 顺 序 为 所 有 打 开 的 独立 的 .CDX 文 件 中 的 索 引 标 识 编 号

SET OPTIMIZE 命 令 - 图31SET OPTIMIZE 命 令 - 图32SET OPTIMIZE 命 令 - 图33SET OPTIMIZE 命 令 - 图34SET OPTIMIZE 命 令 - 图35下面示例说明了不同索引文件类型和标识的编号方式 SET OPTIMIZE 命 令 - 图36 文件名只是为了说明问题 并不需要真正存在 表 video.dbf 打开时带有三个索引 (title.idx, costs.cdx 和 rating.idx) 使用下面命令将其在第一个工作区中打开

USE video INDEX title.idx, costs.cdx, rating.idx IN 1

SET OPTIMIZE 命 令 - 图37video 表有一个结构复合索引文件 (video.cdx) 其中有两个索引标识 (NUMBERSOLD 和

SET OPTIMIZE 命 令 - 图38SET OPTIMIZE 命 令 - 图39SET OPTIMIZE 命 令 - 图40YEARSOLD) 打开 video 时 此结构 .CDX 文件自动打开

SET OPTIMIZE 命 令 - 图41SET OPTIMIZE 命 令 - 图42SET OPTIMIZE 命 令 - 图43由于 .IDX 文件首先被编号 因此发出命令 SET ORDER TO 1 将使 title.idx 成为主控索引 而发出 SET ORDER TO 2 则使 rating.idx 成为主控索引

SET ORDER TO 1

主索引文件 : C:\FOX30\TITLE.IDX SET ORDER TO 2

主索引文件 : C:\FOX30\RATING.IDX

SET OPTIMIZE 命 令 - 图44其次对 video.cdx 中的索引标识进行编号

SET ORDER TO 3

主索引文件 : C:\FOX30\VIDEO.CDX 标识 : NUMBERSOLD SET ORDER TO 4

主索引文件 : C:\FOX30\VIDEO.CDX 标识 : YEARSOLD

SET OPTIMIZE 命 令 - 图45独立文件 costs.cdx 中的索引标识最后被编号

SET ORDER TO 5

主索引文件 : C:\FOX30\COSTS.CDX 标识 : RENTALCOST SET ORDER TO 6

主索引文件 : C:\FOX30\COSTS.CDX 标识 : BUYCOST

SET OPTIMIZE 命 令 - 图46SET OPTIMIZE 命 令 - 图47SET OPTIMIZE 命 令 - 图48SET OPTIMIZE 命 令 - 图49SET OPTIMIZE 命 令 - 图50SET OPTIMIZE 命 令 - 图51SET OPTIMIZE 命 令 - 图52SET OPTIMIZE 命 令 - 图53nIndexNumber 也 可 以 是 0 如 果 发 出 SET ORDER TO 0 命 令 则 所 有 索 引文 件 仍 保 持 打 开 并 且 在 增 加 删 除 或 修 改 记 录 时 更 新 但 是 表 中 所 有 记录 的 显 示 和 访 问 顺 序 是 记 录 编 号 顺 序 而 不 是 索 引 顺 序 不 带 其 他 参 数 的 SET ORDER TO 命 令 与 SET ORDER TO 0 命 令 完 全 一 样

SET OPTIMIZE 命 令 - 图54SET OPTIMIZE 命 令 - 图55如 果 nIndexNumber 大 于 .ID X 文 件 和 .CDX 文 件 的 索 引 标 识 数 则 Visual FoxPro 产 生 错 误 信 息

IDXIndexFileName

SET OPTIMIZE 命 令 - 图56指 定 作 为 主 控 索 引 文 件 的 .ID X 文 件

[TAG] TagName [OF CDXFileName]

SET OPTIMIZE 命 令 - 图57SET OPTIMIZE 命 令 - 图58指 定 .CDX 文 件 中 的 一 个 标 识 作 为 主 控 索 引 标 识 标 识 名 可 以 来 自 结构 .CDX 文 件 或 任 何 打 开 的 独 立 .CDX 文 件

SET OPTIMIZE 命 令 - 图59SET OPTIMIZE 命 令 - 图60如果在各打开的独立 .CDX 文件中存在相同的标识名 应使用 OF CDXFileName 来指定包含此标识的 .CDX 文件

SET OPTIMIZE 命 令 - 图61SET OPTIMIZE 命 令 - 图62如 果 .ID X 文 件 和 标 识 名 重 复 .ID X 文 件 优 先

IN nWorkArea | cTableAlias

SET OPTIMIZE 命 令 - 图63为 在 非 当 前 选 定 工 作 区 中 打 开 的 表 指 定 主 控 索 引 文 件 或 索 引 标 识 nWorkArea

SET OPTIMIZE 命 令 - 图64SET OPTIMIZE 命 令 - 图65指 定 工 作 区 编 号 cTableAlias 指 定 表 的 别 名

ASCENDING | DESCENDING

SET OPTIMIZE 命 令 - 图66SET OPTIMIZE 命 令 - 图67以 升 序 或 降 序 显 示 或 访 问 表 记 录 使 用 ASCENDING 或 DESCENDING 不会 改 变 索 引 文 件 或 索 引 标 识

说 明

SET OPTIMIZE 命 令 - 图68SET OPTIMIZE 命 令 - 图69SET OPTIMIZE 命 令 - 图70SET OPTIMIZE 命 令 - 图71SET OPTIMIZE 命 令 - 图72SET OPTIMIZE 命 令 - 图73SET OPTIMIZE 命 令 - 图74SET OPTIMIZE 命 令 - 图75SET OPTIMIZE 命 令 - 图76SET OPTIMIZE 命 令 - 图77SET OPTIMIZE 命 令 - 图78一个表可以同时打开多个索引文件 但是 只有一个单索引 (.IDX) 文件 主控索引文件 或一个来自复合索引 (.CDX) 文件的索引标识 主控标识 决定表中记录的显示和访问顺序 可 用 SET ORDER 来指定主控索引文件或标识 有些命令 例如SEEK 使用主控索引或标识来查找记录

SET OPTIMIZE 命 令 - 图79SET OPTIMIZE 命 令 - 图80SET OPTIMIZE 命 令 - 图81SET OPTIMIZE 命 令 - 图82SET OPTIMIZE 命 令 - 图83可以在 USE 命令中包含 INDEX 子句随表打开索引文件 如果一个表有相关的结 构 .CDX 文件 这个文件会随着表的打开而自动打开 在一个表被打开以后 可以使用 SET INDEX 命令为这个表打开或关闭索引文件

SET OPTIMIZE 命 令 - 图84SET OPTIMIZE 命 令 - 图85默认情况下 SET ORDER 为当前工作区中打开的表指定主控索引或主控标识

请 参 阅

INDEX , ORDER ( ) , SET INDEX