SQLサーバーデータベースは、インデックスの最適化、インデックスの再作成、またはインデックスの削除と再構築によって調整されます。Foxproにそのようなデータ調整技術はありますか?
ありがとう、チャク。
SQLサーバーデータベースは、インデックスの最適化、インデックスの再作成、またはインデックスの削除と再構築によって調整されます。Foxproにそのようなデータ調整技術はありますか?
ありがとう、チャク。
テーブルを最適化するために..
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つ覚えておくべきことは、FoxProデータベースはサーバー上のファイルのコレクションにすぎないということです。したがって、サーバーディスクの断片化や、アンチウイルスがこれらのファイルから確実に除外されるようにすることなども、かなりの違いを生む可能性があります。
インデックスの再作成については、次のような手順で自分で行う方がよいでしょう。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
テーブルのインデックスの再作成とパッキングが役立ちます。クラスライブラリ(.vcx)でさえ、パックできるテーブルです。しかし、残念ながら私は正確なコマンドを覚えていません。
インデックスの再作成手順を作成していない場合は、実行してStonefieldDatabaseToolkitを入手してください。
http://stonefield.com/sdt.aspx
それが行うことの1つは、インデックスに関するメタデータを構築することです。すべてのテーブル、または一度に1つのテーブルのインデックスを再作成するコマンドがあります。インデックスを追加または削除します。インデックスを追跡したり、インデックスの再作成ルーチンを変更したりする必要はありません。メタデータ(組み込み機能)を検証し、更新されたメタデータをDBCファイルと一緒に出荷して更新します。本番テーブル(構造とインデックス)は、開発中のものと一致するように更新されます。
データベースに含まれるDBFを使用するほとんどのVFP開発者は、このツールが不可欠であると考えています。
ソースコード(SCX、VCX、FRX、LBX、MNX、PJX)のパックに関しては、プロジェクトをビルドするときにすべてを再構築するだけです。VFPは、ビルドの背後にあるすべてのソースコードをパックします。これにより、データベースを最適化または調整するのではなく、結果の実行可能ファイルのサイズが縮小されます。
リック
PACKは危険な場合があります。コマンド中に何かが発生した場合(クラッシュ、停電など)、テーブルが破損している可能性があります。テーブルをパックする前に、必ずバックアップを作成してください。
一時テーブルのレコード以外のものを削除することはめったにないため、私のオフィスでPACKを使用することはめったにありません。それ以外はすべて履歴目的で保持されます。
ただし、REINDEXはたまに必ず使用してください。