0

SQLサーバーデータベースは、インデックスの最適化、インデックスの再作成、またはインデックスの削除と再構築によって調整されます。Foxproにそのようなデータ調整技術はありますか?

ありがとう、チャク。

4

6 に答える 6

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
于 2009-10-16T14:14:32.743 に答える
2

もう1つ覚えておくべきことは、FoxProデータベースはサーバー上のファイルのコレクションにすぎないということです。したがって、サーバーディスクの断片化や、アンチウイルスがこれらのファイルから確実に除外されるようにすることなども、かなりの違いを生む可能性があります。

于 2009-10-16T14:54:20.827 に答える
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
于 2009-10-17T18:18:38.703 に答える
0

テーブルのインデックスの再作成とパッキングが役立ちます。クラスライブラリ(.vcx)でさえ、パックできるテーブルです。しかし、残念ながら私は正確なコマンドを覚えていません。

于 2009-10-16T07:39:49.323 に答える
0

インデックスの再作成手順を作成していない場合は、実行してStonefieldDatabaseToolkitを入手してください。

http://stonefield.com/sdt.aspx

それが行うことの1つは、インデックスに関するメタデータを構築することです。すべてのテーブル、または一度に1つのテーブルのインデックスを再作成するコマンドがあります。インデックスを追加または削除します。インデックスを追跡したり、インデックスの再作成ルーチンを変更したりする必要はありません。メタデータ(組み込み機能)を検証し、更新されたメタデータをDBCファイルと一緒に出荷して更新します。本番テーブル(構造とインデックス)は、開発中のものと一致するように更新されます。

データベースに含まれるDBFを使用するほとんどのVFP開発者は、このツールが不可欠であると考えています。

ソースコード(SCX、VCX、FRX、LBX、MNX、PJX)のパックに関しては、プロジェクトをビルドするときにすべてを再構築するだけです。VFPは、ビルドの背後にあるすべてのソースコードをパックします。これにより、データベースを最適化または調整するのではなく、結果の実行可能ファイルのサイズが縮小されます。

リック

于 2009-11-05T17:33:01.007 に答える
0

PACKは危険な場合があります。コマンド中に何かが発生した場合(クラッシュ、停電など)、テーブルが破損している可能性があります。テーブルをパックする前に、必ずバックアップを作成してください。

一時テーブルのレコード以外のものを削除することはめったにないため、私のオフィスでPACKを使用することはめったにありません。それ以外はすべて履歴目的で保持されます。

ただし、REINDEXはたまに必ず使用してください。

于 2009-11-06T03:03:03.623 に答える