我需要在两个不同的表中为两个不同的列进行全文索引。
唯一的问题是我使用的是innodb,我无法进行全文索引。
我知道有很多选项,例如sphinx,我看了一下这些选项,但我觉得这样做太过分了,因为全文索引的列是varchar(20)。
而且,可能,“最多”只有大约1,000,000行
我认为一个简单的选择是仅使用主键和要使用myisam索引的varchar复制两个表。
有什么建议吗?有没有办法轻松实现这一目标?
答案 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);
如果从属行引用不存在的主行,请删除。
如果主行不存在从属行,请插入。
这不是最好的解决方案,但很简单。