web-dev-qa-db-ja.com

mysql innodb db全文検索FTS_DOC_ID列

ID整数のプライマリ自動インクリメントキーを持つ既存のmysqlテーブルに全文検索を追加しています。

全文索引を追加すると、警告が表示されます。

/*!50604 ALTER TABLE `phppos_additional_item_numbers` ADD FULLTEXT INDEX item_number_search (`item_number`)*/;      

Warning (Code 124): InnoDB rebuilding table to add column FTS_DOC_ID

すべてのコードをリファクタリングして、列FTS_DOC_IDを追加してこの警告を削除することはできません。この警告が発生するのを許可するのは悪いことですか?

3
Chris Muench

manual を読むことは、悪いことではないようです。 MySQLは、実行する必要がある追加のアクションについて通知するだけです。

InnoDBは、ドキュメントID(DOC_ID)と呼ばれる一意のドキュメント識別子を使用して、フルテキストインデックス内の単語を、その単語が出現するドキュメントレコードにマップします。マッピングには、インデックス付けされたテーブルにFTS_DOC_ID列が必要です。 FTS_DOC_ID列が定義されていない場合、フルテキストインデックスが作成されると、InnoDBは非表示のFTS_DOC_ID列を自動的に追加します。

警告を受けたくない場合は、現在自動化されている多くの作業のように見える列を自分で管理する必要があります。

FTS_DOC_ID列を自分で定義することを選択した場合、空または重複する値を回避するために列を管理する必要があります。 FTS_DOC_ID値は再利用できません。つまり、FTS_DOC_ID値は常に増加する必要があります。

この警告を生成するアクションの副作用の1つは、テーブルを再構築する必要があることです。すでに多くのレコードが含まれているテーブルでは、時間がかかる場合があります。ただし、列を自分で追加した場合も同じであるため、違いはありません。

6
jkavalik