我有以下表格设计,带有全文索引和以下查询:
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 :(得分:0)
INDEX
或INSERT
发生时,不会{从头开始重建UPDATE
。索引“逐步”更新。引擎会进行一些优化,以最大限度地降低此类更新的成本。
通过“经常更新”,您是否经常更改现有行的标题?或者你的意思是新行被添加?我问这个问题,因为两者之间的开销存在一些差异。