【问题标题】:Text searching Mysql Index文本搜索 Mysql 索引
【发布时间】:2011-12-11 23:23:51
【问题描述】:

我有一个查询速度太慢了几倍,但我怀疑如果我知道如何正确索引它可以大大改进。我有两个要连接的表和一个 WHERE 子句,它对一个表的字段进行日期比较,对另一个表的字段进行 REGEXP。

SELECT * FROM tbl1 INNER JOIN tbl2 ON tbl1.id=tbl2.id 
 WHERE tbl1.date_time > now() AND tbl2.name REGEXP '[[:<:]]search[[:>:]]'   

日期已编入索引,但正则表达式的字符串不是因为该表中有很多插入,而且我担心索引字符串会随着索引的更新而减慢插入速度。目标是查找给定单词(本例中为“搜索”)何时出现在文本中。我也没有做全文索引,因为当只有几个不同的词 ~2000 会像这样被搜索时,这似乎是一种浪费。如果有更好的方法来完成此过程,我们将不胜感激。

【问题讨论】:

  • 你能告诉我们你的表结构吗?此外,在 WHERE 子句中添加更多表达式以缩小结果范围可能会有所帮助。

标签: mysql performance full-text-search indexing


【解决方案1】:

所以我想出的解决方案是在离线脚本中进行处理并保存结果,而不是实际进行全文索引。我没有运行这个有时很慢的正则表达式,而是构建了一个类似 trie 的结构,其中包含所有可能的搜索值,并且当给定文本时,可以通过查找来快速判断哪些是存在的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 2012-07-03
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多