【发布时间】:2026-01-15 13:10:01
【问题描述】:
我正在为我网站的消息部分构建一个搜索功能,并拥有一个包含超过 9,000,000 行的消息数据库,并在 sender、subject 和 message 字段上建立索引。我希望在查询中使用 LIKE mysql 子句,例如 (ex)
SELECT sender, subject, message FROM Messages WHERE message LIKE '%EXAMPLE_QUERY%';
检索结果。不幸的是,当存在前导通配符时,MySQL 不使用索引,这是搜索查询可能出现在消息中的任何位置所必需的(这就是通配符的工作方式,不是吗?)。查询非常非常慢而且我也不能使用全文索引,因为烦人的 50% 规则(我不能排除那么多)。无论如何(甚至,任何替代方法)都可以使用 like 和两个通配符优化查询吗?任何帮助表示赞赏。
【问题讨论】:
-
您有 900 万行,除了消息之外,您无法过滤其他任何内容?没有发送日期和发件人?
-
看看SphinxSE。我喜欢这种东西。
-
@RobinCastlin 我可以,这只是一个例子。但按消息内容搜索是任何消息应用程序的关键功能