用于快速过滤的SQL数据库优化

时间:2012-05-28 14:24:58

标签: database search

所以,看看我有什么。

短文本消息,以纯文本,标记文本和html格式存储在数据库中。对于标记文本,标记嵌入到每条消息中。例如,我可以使用以下标记消息:

A [quick] [brown] fox jumps over a [lazy] dog.

Quick,Brown和Lazy - 是嵌入式标签,在html中以粗体样式显示。任何用户都可以标记另一个标签,例如[dog]。发生这种情况,我需要使用单词 dog 刷新数据库中的所有消息,并将其标记为无处不在

有成千上万的消息,所以我需要过滤必要的消息并更新它们(或插入新值),单独留下用户可以同时更改标签(并删除它们)。我正在考虑一个满足这些需求的辅助表,保留搜索索引之类的内容并查找要快速更新的消息。当然,所有更改都是在其他几个用户批准后才应用的,只是为了保留订单。

是否有任何灵魂可以使搜索和更新过程更有效,或者我应该在这里选择其他内容?

如果重要的话,我会使用Ruby + MySQL。

1 个答案:

答案 0 :(得分:0)

如果你绝对必须更新每条消息,那么你除了暴力改变它们之外别无选择。如果只有几千,那么它就足够快了。但是,如果它增长到数百万,那么在每个消息中定位标记的时间可能会开始影响,除非您使用查询优化和/或使用后台更新线程玩游戏,如您所提到的。 (或者使用日志支持更改为临时数据库)

如果标签的数量足够小,为什么不简单地在表中维护标签列表,并且当检索每条消息时,通过标签表传递每个潜在标签 (即,对于消息中的每个单词,检查单词是否在标记表中)。如果消息很短,这将相当快,并且可以对标签表进行最佳索引以提供帮助。

标记表的一个优点是,您可以创建一个消息标记1:M表作为反向索引,这将加快查询搜索速度,尽管您的问题似乎与搜索性能无关。