2009-10-16 147 views
0

我們通過索引碎片整理或重新索引或刪除和重建索引來調整SQL Server數據庫。 Foxpro有沒有這種數據調整技術?調整FoxPro數據

謝謝, 澤。

回答

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 
+0

順便說一句,如果你做了一個PACK,備註字段仍然會打包以及刪除標記爲刪除的行。 PACK MEMO僅清除備註字段中的空格,但不刪除標記爲刪除的行。 – kevinw 2009-10-17 15:40:47

0

Reindexing and packing tables helps。即使是類庫(.vcx)也可以打包。但不幸的是我不記得確切的命令。

2

另一個要牢記的是,FoxPro數據庫只是服務器上文件的集合。因此,諸如服務器磁盤碎片以及確保從這些文件中排除反病毒等問題也可能會有所不同。

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 
+0

+1好點斯圖爾特。我的老年人一定會變得健忘。 – kevinw 2009-10-17 21:23:12

0

如果你沒有創建重建索引過程中,跑出去並獲得斯通菲爾德數據庫工具包:

http://stonefield.com/sdt.aspx

一個它做的事情是建立有關索引的元數據。它有一個命令來重新索引所有表或一次一個表。您可以添加或刪除索引,不需要跟蹤索引或更改重新索引例程。驗證元數據(內置功能),並將更新後的元數據與您的DBC文件一起發貨並更新。生產表(結構和索引)已更新,以符合您在開發中的要求。

大多數使用數據庫包含DBF的VFP開發人員發現這個工具是不可或缺的。至於包裝你的源代碼(SCX,VCX,FRX,LBX,MNX,PJX),你所要做的就是在你構建項目時重建所有東西。 VFP將打包所有源代碼。這將減少生成的可執行文件的大小,而不是優化或調整數據庫。如果命令中有事(死機,停電等)

裏克

0

包可以dangerous-,該表可能被破壞。在包裝一張桌子之前,請始終進行備份。

我們很少在辦公室使用PACK,因爲我們很少刪除臨時表中的記錄以外的任何內容 - 其他所有內容都是爲了歷史目的而保留的。儘管如此,每隔一段時間肯定會使用REINDEX。