调整FoxPro数据

时间:2009-10-16 07:30:25

标签: performance foxpro

我们通过索引碎片整理,重新索引或删除和重建索引来调整SQL Server数据库。 Foxpro有没有这样的数据调整技术?

谢谢, 泽。

6 个答案:

答案 0 :(得分:2)

对表进行碎片整理......

USE YourTable EXCLUSIVE
PACK

如果你的表有任何备忘录字段

PACK MEMO

如果表有索引,则包将自动重新索引它们。

正如Arnis所提到的,VFP中的大多数内容都是基于表格,表格,类别,报告,尽管它们有不同的扩展名。所以你可以做到

use YourForm.scx exclusive
pack memo 

use YourClassLib.vcx exclusive
pack memo

use YourReport.frx exclusive
pack memo

use YourProject.pjx exclusive
pack memo

此外,如果您的常规.dbf表要杀死单个索引......

use YourTable exclusive
delete tag MyIndexTag

或删除所有索引

delete tag all

答案 1 :(得分:2)

要记住的另一件事是FoxPro数据库只是服务器上的文件集合。因此,服务器磁盘碎片以及确保从这些文件中排除反病毒之类的东西也会产生很大的不同。

答案 2 :(得分:1)

对于重建索引,你最好自己使用这样的程序:REINDEX有时无法修复索引损坏。

procedure reindextable

lparameters cTable
local cDBC, nTagCount, cTag, nTag
local array arrTags[1]

if pcount() = 0
    ? "No parameter"
    return -1
endif

close tables all

use (cTable) exclusive

? "Reindexing " + alltrim(alias())

nTagCount = tagcount()
if nTagCount = 0
    ? "No tags found"
    return -1
endif

dimension arrTags[nTagCount, 7]
for nTag = 1 to nTagCount
    arrTags[nTag, 1] = tag(nTag)
    arrTags[nTag, 2] = key(nTag)
    arrTags[nTag, 3] = for(nTag)
    arrTags[nTag, 4] = unique(nTag)
    arrTags[nTag, 5] = primary(nTag)
    arrTags[nTag, 6] = candidate(nTag)
    arrTags[nTag, 7] = descending(nTag)
endfor

* OK, we have the info to re-create the tags. Now delete the existing tags.

delete tag all

* Now re-create the tags
for nTag = 1 to nTagCount
    if arrTags[nTag, 5]
        * Primary key; need to use ALTER TABLE
        cTag = "ALTER TABLE " + cTable + " ADD PRIMARY KEY " + arrTags[nTag, 2]

        * Thanks to Anders Altberg for the info that you can add a filter to a PK, as long
        * as the TAG appears *after* the filter.
        if not empty (arrTags[nTag, 3])
            cTag = cTag + " FOR " + arrTags[nTag, 3]
        endif

        cTag = cTag + " TAG " + arrTags[nTag, 1]
    else
        * Regular index (or possibly a Candidate)
        cTag = "INDEX ON " + arrTags[nTag, 2] + " TAG " + arrTags[nTag, 1]
        if not empty (arrTags[nTag, 3])
            cTag = cTag + " FOR " + arrTags[nTag, 3]
        endif

        if arrTags[nTag, 4]
            cTag = cTag + " UNIQUE "
        endif

        if arrTags[nTag, 6]
            cTag = cTag + " CANDIDATE "
        endif

        if arrTags[nTag, 7]
            cTag = cTag + " DESC "
        endif

    endif

    * This will create the tag
    &cTag

    ? cTag


endfor

? "Success."

return 0

答案 3 :(得分:0)

重新索引和打包表有帮助。甚至类库(.vcx)也是可以打包的表。但不幸的是,我不记得确切的命令。

答案 4 :(得分:0)

如果您没有创建重建索引程序,请运行并获取Stonefield Database Toolkit:

http://stonefield.com/sdt.aspx

它所做的一件事是构建有关索引的元数据。它有一个命令来重新索引所有表,或一次一个表。您可以添加或删除索引,无需跟踪它或更改重建索引例程。验证元数据(内置功能),并使用DBC文件发布更新的元数据并进行更新。更新生产表(结构和索引)以匹配开发中的内容。

大多数使用包含DBF的数据库的VFP开发人员都认为这个工具是不可或缺的。

至于Packing您的源代码(SCX,VCX,FRX,LBX,MNX,PJX),您在构建项目时所要做的就是全部重建。 VFP将打包构建背后的所有源代码。这将减少生成的可执行文件的大小,而不是优化或调整数据库。

瑞克

答案 5 :(得分:0)

PACK可能很危险 - 如果在命令期间发生某些事情(崩溃,停电等),表可能会被破坏。在打包桌子之前,请务必进行备份。

我们很少在办公室使用PACK,因为我们很少删除临时表中的记录以外的任何内容 - 其他所有内容都是为了历史目的而保留的。

但是,每隔一段时间肯定会使用REINDEX。