gpt4 book ai didi

php - 在 MySQL 中使用 LIKE 子句优化表以进行搜索

转载 作者:行者123 更新时间:2023-11-29 03:43:27 25 4
gpt4 key购买 nike

我正在为我网站的消息部分构建一个搜索功能,并且有一个消息数据库,其中包含超过 9,000,000 行,并且索引了 sendersubjectmessage 字段。我希望在我的查询中使用 LIKE mysql 子句,例如 (ex)

SELECT sendersubjectmessage FROM Messages WHERE message LIKE ' %EXAMPLE_QUERY%';

检索结果。不幸的是,当存在前导通配符时,MySQL 不使用索引,这是必要的,因为搜索查询可能出现在消息中的任何位置(这就是通配符的工作方式,不是吗?)。查询非常非常慢而且我也不能使用全文索引,因为令人讨厌的 50% 规则(我只是不能排除那么多)。无论如何(或者甚至有任何替代方法)使用 like 和两个通配符来优化查询吗?感谢您的帮助。

最佳答案

你应该要么使用全文索引(你说你不能),要么自己设计一个全文搜索,要么从 MySQL 卸载搜索并使用 Sphinx/Lucene。对于 Lucene,您可以使用 Zend Framework 中的 Zend_Search_Lucene 实现或使用 Solr。

MySQL中的普通索引是B+树,如果不知道字符串的开头就不能使用它们(开头有通配符时就是这种情况)

另一种选择是使用引用表自行实现搜索。将文本拆分为单词,并创建包含单词、record_id 的表。然后在搜索中将查询拆分为单词并搜索引用表中的每个单词。通过这种方式,您不会将自己限制在整个文本的开头,而只会限制在给定单词的开头(无论如何您都会匹配其余单词)

关于php - 在 MySQL 中使用 LIKE 子句优化表以进行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10152782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com