2017-07-31 4 views
2

MySQLの私は、フルテキストインデックスと次のクエリでは、次の表のデザイン持っFULL TEXTインデックスに頻繁に更新COLUMNS

CREATE TABLE artists (
    id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, 
    title varchar(255) NOT NULL, 
    description text NOT NULL, 
    category_id INT NOT NULL, 
    -- some other columns excluded for brevity 
    FULLTEXT idx (title, description), 
    FOREIGN KEY fk_category(category_id) REFERENCES categories(id) 
) ENGINE=InnoDB; 


CREATE TABLE categories (
    id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, 
    name varchar(255) NOT NULL, 
    INDEX name_idx (name) 
) ENGINE=InnoDB; 



SELECT * 
    FROM artists 
INNER JOIN categories on categories.id = artists.category_id 
WHERE categories.name = 'Rock' AND MATCH (artists.name, artists.description) AGAINST ('Michael Jackson' IN BOOLEAN MODE); 

今タイトルと説明は頻繁に更新される可能性が高いです。アーティストテーブルに何千ものレコードがあると、ユーザーがタイトルや説明を編集したり、新しいレコードを挿入するたびにフルテキストインデックスが再作成されます。

このようなシナリオに対応するには、どのようなデザインが適していますか?タイトルと説明のフィールドを別々のテーブルに移動する必要があります。違いがありますか?

アドバイスをいただければ幸いです。注:私はsolr、elasticなどの全文検索を実装するための他のメソッドを知っていますが、私は現在のところ上記に限られています。

+0

MyISAMまたはInnoDBを使用していて、[documentation](https://dev.mysql.com/doc/refman/5.7/en/fulltext-fine-tuning.html)を読んでいますか? –

+0

@投稿されたコードに示されているように、そのinnodbを書き留めます。ドキュメントは、この問題に関する助言を一切していません。 – adam78

+0

私はあなたの質問をupvotedしました。私はいくつかのMySQLの教祖があなたを助けることを願っています。 –

答えて

0

INSERTまたはUPDATEが発生するたびに、INDEXは「最初から再構築」されません。インデックスは「段階的に」更新されます。エンジンは、このような更新のコストを最小限に抑えるためにいくつかの最適化を行います。

「頻繁に更新される」とは、のタイトルが頻繁に変更されていることを意味しますか?行ですか?新しい行が追加されているということですか?私はこの2つの間のオーバーヘッドに多少の違いがあるので、この質問をします。

関連する問題