使用myisam奴隶/鬼表在innodb中搜索全文

时间:2011-06-23 05:28:51

标签: mysql indexing innodb myisam

我需要在两个不同的表中为两个不同的列进行全文索引。

唯一的问题是我使用的是innodb,我无法进行全文索引。

我知道有很多选项,例如sphinx,我看了一下这些选项,但我觉得这样做太过分了,因为全文索引的列是varchar(20)。

而且,可能,“最多”只有大约1,000,000行

我认为一个简单的选择是仅使用主键和要使用myisam索引的varchar复制两个表。

有什么建议吗?有没有办法轻松实现这一目标?

2 个答案:

答案 0 :(得分:1)

您的方法似乎是正确的。

  • 创建一个只包含感兴趣的字段(pkey(s)和感兴趣的varchar)的新表,引擎myisam。

  • 根据需要在此新表上创建全文索引。

主要的变化是保持这个新表与主表同步。这样做的最佳方法是在插入,更新和删除主表时使用triggers

另一个转折是防止最终用户篡改全文索引表。这也可以通过触发器来完成,但有一种更好的方法:创建一个db用户(例如tg_user),并授予他对该表的所有权。然后撤消所有,除了选择其他用户。并确保在创建上述触发器时使用definer子句。

答案 1 :(得分:0)

我决定采用一个简单的解决方案:

首先,将行插入innodb表(master)。然后,在它之后,将行插入myisam表(不是触发器)。

运行一个小时左右的cron以确保参照完整性。

查询将是这样的:

SELECT * 
FROM master 
WHERE master.ID NOT IN 
    (SELECT slave.ID FROM slave WHERE master.ID=slave.ID);

SELECT * 
FROM slave 
WHERE slave.ID NOT IN 
    (SELECT master.ID FROM master WHERE slave.ID=master.ID);

如果从属行引用不存在的主行,请删除。

如果主行不存在从属行,请插入。

这不是最好的解决方案,但很简单。