0

約5000万から1億のレコードを含むMySQLDBがあります。

私のテーブルフィールドは次のとおりです。TABLE_ID (INT), TABLE_STRING (VARCHAR 255), TABLE_BOOL (INT)

TABLE_IDは私の主キーですがTABLE_STRING、テーブル内のすべての行で一意に保たれていることを確認する必要があります。

インデックスとして設定TABLE_STRINGし、スクリプトを使用しSELECTて文字列がすでに存在するかどうかを確認する必要がありTABLE_STRINGますか、それともテーブル設定で一意として設定する必要がありますか?

これを達成する他の方法はありますか?そうでない場合は、上記のどれが良いですか?

ありがとう、

4

2 に答える 2

1

スペースに問題がない場合は、TABLE_STRINGフィールドにUNIQUEインデックスを簡単に追加できます。

これにより、そのフィールドに一意のインデックスが作成され、重複データを追加しようとした場合に警告が表示されます(挿入/更新操作)。

大量の行があり、フィールドがVARCHAR(255)であるため、インデックスファイルは非常に大きいと予想されます。

ただし、スペースについて懸念がある場合は、を削除して主キーとしてTABLE_ID使用することをお勧めします(これは一意になります)。TABLE_STRING

TABLE_STRING個人的には、フィールドに一意のインデックスを追加するだけです。

そのフィールドのコンテンツが重複している行がすでにある場合、インデックスを追加する操作が最初に失敗する可能性があることに注意してください。最初に、そのフィールドに重複データがあるかどうかを確認することをお勧めします。

HTH

于 2012-09-10T17:30:35.100 に答える
0

すでに述べたように、にUNIQUEインデックスを作成する必要がありますTABLE_STRING。また、各パーティションにローカルインデックスを設定することでインデックスのパフォーマンスが向上するため、パーティション化についても検討する必要があります。

于 2012-09-10T17:35:47.100 に答える