Indexing ADS如何在选择查询中使用索引

Indexing ADS如何在选择查询中使用索引,indexing,dbf,advantage-database-server,clipper,Indexing,Dbf,Advantage Database Server,Clipper,我有一个.dbf文件,来自该公司的一个旧clipper程序,我在ADS 12评估中将它添加到数据字典中,并带有dbf(.ntx)的相关索引文件 这些字段是: 账户、类型、账单、账单、kwhr、金额、付款、当前、以前、外汇、fpca、pfcharge、需求、demandchg、退税、付款日期、虚拟、抽奖、能源、其他、pf、adj、日期账单、账单统计、插入、投标、计量、adj2、生命线、e_vat、w_税、添加_chg、重组、mtrr、高级 并包含300k+行 .dbf包含4个.ntx(索引)文件,

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

这些字段是:

账户、类型、账单、账单、kwhr、金额、付款、当前、以前、外汇、fpca、pfcharge、需求、demandchg、退税、付款日期、虚拟、抽奖、能源、其他、pf、adj、日期账单、账单统计、插入、投标、计量、adj2、生命线、e_vat、w_税、添加_chg、重组、mtrr、高级

并包含300k+行

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

当我执行简单查询时:

从TABLE.DBF中选择*,其中account='000000…'和billmo='2016…'

大约需要16秒或更长时间。关于删除:

DELETE FROM TABLE.DBF,其中account='…'和billmo='…'

还是一样

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

SELECT*FROM TABLE.DBF使用索引TABLE1,其中account='…'和billmo='…'

但是它不起作用。

一些提示:

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

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

  • 如果索引位于FIELD1+FIELD2上,则必须按如下方式实际查询:

    从TABLE.DBF中选择*,其中account+billmo='000000…'+'2016…'

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

  • 只要您只使用数据做一些报告,而不想将其写回您的遗留应用程序,那么将其迁移到更好的数据库格式(ADT+ADI,具有正确的索引,如“account;billmo”[注意分号])可能是有意义的
  • 一些提示:

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

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

  • 如果索引位于FIELD1+FIELD2上,则必须按如下方式实际查询:

    从TABLE.DBF中选择*,其中account+billmo='000000…'+'2016…'

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

  • 只要您只使用数据做一些报告,而不想将其写回您的遗留应用程序,那么将其迁移到更好的数据库格式(ADT+ADI,具有正确的索引,如“account;billmo”[注意分号])可能是有意义的

  • 您好,我已经将关联的索引文件添加到表中,并且我也尝试了您建议的查询,使用
    帐户+账单
    仍然显示带有警告
    限制的表扫描未优化
    。我试图用ARC32重新编制索引,但仍然是相同的警告。我无法迁移该表,因为此处的其他系统正在使用它。您是否在每列上尝试了单独的索引?正如我已经写过的:当索引未加载时,SQL引擎无法利用它(不是有意的双关语)。还是一样。我如何知道索引是否已加载?我已经把它加到桌子上了。恐怕我只能帮你了。你可能想在SAP论坛上发帖:嗨,我知道问题出在哪里了。当没有人使用桌子时,速度很快。旧系统使用的是表,当许多人使用它时,它开始变慢。如果没有人使用,我可以快速获取数据,但sql实用程序仍然说它不使用任何索引。我可以问一下您使用了什么TableType和DBFTableType吗?因为当表类型为NTX时,我实际上无法使用SQL实用程序,所以只能在ADT中使用。嗨,我已经将关联的索引文件添加到表中,并且我还尝试了您建议的使用
    ACCOUNT+BILLMO
    的查询,但它仍然显示了警告
    限制未优化的表扫描。我试图用ARC32重新编制索引,但仍然是相同的警告。我无法迁移该表,因为此处的其他系统正在使用它。您是否在每列上尝试了单独的索引?正如我已经写过的:当索引未加载时,SQL引擎无法利用它(不是有意的双关语)。还是一样。我如何知道索引是否已加载?我已经把它加到桌子上了。恐怕我只能帮你了。你可能想在SAP论坛上发帖:嗨,我知道问题出在哪里了。当没有人使用桌子时,速度很快。旧系统使用的是表,当许多人使用它时,它开始变慢。如果没有人使用,我可以快速获取数据,但sql实用程序仍然说它不使用任何索引。我可以问一下您使用的是什么TableType和DBFTableType吗