2017-07-31 69 views
2

我有以下表的設計與全文索引和下面的查詢:MySQL的 - 全文INDEX ON頻繁更新的列

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

@Tim它的innodb在發佈的代碼中指出。文件不提供任何關於此事的建議。 – adam78

+0

我已經upvoted你的問題。我希望一些MySQL大師可以幫助你。 –

回答

0

INDEX每當出現INSERTUPDATE時,都會「從頭開始重建」。索引是「增量」更新的。引擎會進行一些優化以最小化此類更新的成本。

通過「頻繁更新」,是否意味着您經常更改現有行的標題?或者你的意思是說新的行正在被添加?我問這個問題是因爲兩者之間的開銷有些不同。