回答

收藏

在SQL中最有效的搜索方式?

技术问答 技术问答 395 人阅读 | 0 人回复 | 2023-09-14

我有一个数据库,包括75000 线,每天添加500多个项目。
# L  D; ?; s. g4 F( A1 J2 f3 d每行都有标题和描述。
# S3 B/ j* }; C9 r我创造了一个RSS
6 \3 q5 j* X; yfeed,特定搜索词的最新条目(例如,http://site.com/rss.rss?q; Z6 ]# ~; C+ ?! I/ z$ s
= Pizza将是搜索词 Pizza”输出RSS)。
+ c4 L  }9 e  c! ~  j我想知道为此写什么SQL查询的最佳方法。现在我有:1 D7 X3 ^5 J0 w1 ?3 q; C
SELECT * FROM 'table' WHERE (('title' LIKE %searcherm%) OR ('description' LIKE %searcherm%))LIMIT 20;但问题是执行查询需要2到10秒。
6 O* `+ K/ m. d$ H$ J有没有更好的方法来编写查询,我是否必须缓存结果(我该怎么办?),或者更改数据库结构中的某些内容可以加快查询速度(索引?
# y* t( e8 ^* N" a  v$ {# U                                                                & ]( U9 i' d# i" d- t
    解决方案:                                                                " V0 ?3 b1 t- O7 _/ l
                                                                在这两个字段上合并一个相对简单的解决方案FULLTEXT然后使用索引进行搜索。5 }5 ]  u) f; J+ H' [9 W) D
ALTER TABLE table ADD FULLTEXT(title,description);然后,您需要执行搜索,请执行以下操作:
3 \) q+ V0 [2 J! sSELECT id FROM tableWHERE MATCH (title,description) AGAINST ('keyterm');全文索引搜索是大多数SQL自动解决方案包含在数据库中。LIKES速度要快得多。这也优化了你的具体情况,因为你只对自然语言搜索词感兴趣。
3 S* L9 e* [4 U) {2 r5 T$ o同样,全文索引也有一些限制性算法来检测相关性。您可以在这里了解更多信息* \& \. A5 x( {* H* d) b; q
编辑
( i) I3 l) x5 {1 x9 K在alter在句子中,我错过了全文索引的名称,应该是:! s# f$ E# I- H8 N& ~. K* z. R3 Q
ALTER TABLE table ADD FULLTEXT ft_index_name(title,description);
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则