MySQL全文搜索innoDB表的解决方法

Rob*_*Rob 15 mysql search myisam innodb full-text-search

我正在设计一个使用MySQL作为后端数据库的内部Web应用程序.数据的完整性至关重要,因此我将innoDB引擎用于其外键约束功能.

我想对一种类型的记录进行全文搜索,而innoDB表本身不支持这种记录.MyISAM由于缺少外键支持,我不愿意转移到表,因为它们的锁是每个表,而不是每行.

使用MyISAM引擎创建我需要搜索的记录的镜像表并将其用于全文搜索是不是不好的做法?这样我只是在搜索数据的副本,如果这些数据发生任何变化,那么它就没那么大了,因为它总是可以重新创建.

或者这是一种应该避免的尴尬方式吗?

谢谢.

mic*_*ael 10

您可以使用触发器进行某种数据同步(如果您的mysql版本支持它们).它们允许您在某些点运行SQL的小片段,例如在将数据插入表中或从表中删除之后.

例如...

create trigger TRIGGER_NAME after insert on INNODB_TABLE
insert into MYISAM_TABLE select * from INNODB_TABLE
where id = last_insert_id();
Run Code Online (Sandbox Code Playgroud)

...只要将数据插入INNODB表,相同的数据就会自动插入到MYISAM表中.


小智 7

我觉得它真的很尴尬.也就是说,我的"快速原型可能会意外地成为生产代码"这样做的方法是这样的:

CREATE TEMPORARY TABLE search_mirror (FULLTEXT INDEX (col1, col2, ...)) Engine=MyISAM SELECT * FROM original_innodb_table;

SELECT * FROM search_mirror WHERE MATCH(col1, col2, ...) AGAINST ('foo');

DROP TEMPORARY TABLE search_mirror;
Run Code Online (Sandbox Code Playgroud)

对于奖励积分,您可以在交易中完成所有这些以适合您的喜好(如果您使用非持久性连接并且每次连接仅搜索一次,则可获得双倍奖励,因为您可以消除掉落声明).

是的我意识到这不是真正的镜像/复制.是的,我意识到重复表可能很昂贵(这里的数据集相对较小).就像我说的那样,快速而肮脏的原型.因人而异

  • 同意.这真的很尴尬. (4认同)