ADS如何在选择查询

时间:2016-10-18 06:40:20

标签: indexing dbf advantage-database-server clipper

我在公司的旧剪辑器程序中有一个.dbf文件,我将它添加到ADS 12 Evaluation中的数据字典中,并附带了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 = '...'

但它不起作用。

1 个答案:

答案 0 :(得分:1)

一些提示:

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

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

  3. enter image description here

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

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

    2. 这里没有红色圆圈,它表示“AOF SCAN”而不是“TABLE SCAN”,这意味着ADS在“优化优化过滤器”扫描中使用索引而不是读取整个表格。

      1. 只要您只使用数据进行某些报告并且不想将其写回旧版应用程序,将它(可能是定期作业)迁移到更好的数据库格式(ADT +)是有意义的。 ADI使用正确的索引,例如'account; billmo'[注意分号]已经相当快了。)
      2. enter image description here