0

我有一个来自公司旧裁剪器程序的 .dbf 文件,我将它添加到 ADS 12 评估中的数据字典中,并带有 dbf (.ntx) 的相关索引文件

字段是:

account,type,billmo,bill,kwhr,amount,pay,present,previous,forex,fpca,pfcharge,demand,demandchg,rebate,paydate,dummy,raffle,enerchg,others,pf,adj,datebill,billstat,insert,tendered,meter,adj2,lifeline,e_vat,w_tax,add_chg,restruc,mtrr,senior

并包含 300k+ 行。

.dbf 包含 4 个 .ntx(索引)文件,其中一个具有表达式account+billmo.

当我执行一个简单的查询时:

SELECT * FROM TABLE.DBF WHERE account='000000...' AND billmo = '2016...'

大约需要 16 秒或更长时间。同样在删除:

DELETE FROM TABLE.DBF WHERE account='...' AND billmo = '...'

它仍然是一样的。

我不知道如何在查询中使用索引(.ntx),我搜索了谷歌并尝试了类似的东西

SELECT * FROM TABLE.DBF use index TABLE1 WHERE account = '...' AND billmo = '...'

但它不起作用。

4

1 回答 1

2

一些提示:

  1. NTX(和 IDX)文件必须手动添加到表中(与自动检测到的 CDX 和 ADI 索引文件相反,因为它们与表具有相同的基本名称)。在 ARC32 中,当您右键单击表格时,会出现“添加现有索引文件...”选项。

  2. 您可以通过显示执行计划(SQL Utility 窗口工具栏中的一个大表和两个小表的按钮)来检查 ARC32 是否实际使用任何索引。如果有一个红色圆圈,上面写着“TABLE SCAN”,那么它不会使用索引。

在此处输入图像描述

  1. 如果索引在 FIELD1+FIELD2 上,您必须像这样实际查询它:

    SELECT * FROM TABLE.DBF WHERE account + billmo = '000000...' + '2016...'

这里没有红色圆圈,它显示“AOF SCAN”而不是“TABLE SCAN”,这意味着 ADS 在“Advantage Optimized Filter”扫描中使用索引,而不是读取整个表。

  1. 只要您只使用数据进行一些报告并且不想将其写回您的遗留应用程序,那么将它(可能通过定期作业)迁移到更好的数据库格式(ADT + ADI 正确'account;billmo' [注意分号] 之类的索引已经有了很大的进步)。

在此处输入图像描述

于 2016-10-18T11:14:56.020 回答