0

現在、 MyISAMエンジンを使用してテーブルにデータを挿入していますが、

LOAD DATALOAD DATA の終了後にインデックスを作成して最適化したい(事前にキーを無効にし、終了後に有効にする)。

ドキュメントからLOAD DATA CONCURRENT、ロードデータはテーブルの最後にレコードを追加する必要がありますが、同時に同じテーブルへの同時読み取りが引き続きキーを使用することに興味があります。読み取り操作は、開始前に利用可能な最後のインデックス (自動インクリメント ID) までのみ、テーブルから情報を読み取ろうとすることを保証しますLOAD DATA CONCURRENT

例えば

LOAD DATA CONCURRENTインデックス 100000 から始まるデータを追加し、インデックスを 200000 まで自動インクリメントします。

同時にSELECT * FROM TableName WHERE id <=99999 AND ...ステートメントが発生する可能性があります。

ステートメントでのみキーをローカルで無効にLOAD DATA CONCURRENTして、読み取り操作がそのSELECTステートメントで定義されたインデックスを引き続き使用することは可能ですか?

4

1 に答える 1

1

1. あなたのid列が主キーであり、2. を使用する予定であると仮定しますALTER TABLE ... DISABLE KEYS

マニュアルによると:

ALTER TABLE ... DISABLE KEYS は、MySQL に一意でないインデックスの更新を停止するように指示します。(...) 非一意のインデックスが無効になっている間、それらを使用する SELECT や EXPLAIN などのステートメントでは無視されます。

したがって、主キーは引き続きフォームのクエリに使用されます

SELECT * FROM TableName WHERE id <=99999

ただし、テーブルのサブセットのみでキーを無効にすることはできません。

于 2013-01-23T09:36:40.357 に答える