当前位置: 首页 > 面试题库 >

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

姚臻
2023-03-14
问题内容

我有一个数据库,其中有75,000+行,每天添加500多个条目。

每行都有标题和描述。

我创建了一个RSS
feed,为您提供了特定搜索词的最新条目(例如,http://site.com/rss.rss?q
=
Pizza将为搜索词“ Pizza”输出RSS)。

我想知道什么是为此编写SQL查询的最佳方法。现在我有:

SELECT * 
FROM 'table' 
WHERE (('title' LIKE %searcherm%) OR ('description' LIKE %searcherm%))
LIMIT 20;

但是问题是执行查询需要2到10秒。

有没有更好的方法来编写查询,我是否必须缓存结果(该怎么做?),或者更改数据库结构中的某些内容可以加快查询速度(索引?)


问题答案:

一个相对简单的解决方案是在这两个字段上合并FULLTEXT索引,然后使用该索引进行搜索。

ALTER TABLE table ADD FULLTEXT(title, description);

然后,您需要执行搜索,请执行以下操作:

SELECT id FROM table
WHERE MATCH (title, description) AGAINST ('keyterm');

全文索引搜索是大多数SQL数据库中包含的自动解决方案。与执行LIKES相比,速度要快得多。这也针对您的特定情况进行了优化,因为您仅对自然语言搜索词感兴趣。

同样,全文索引具有一些用于检测相关性的限制算法。您可以在此处了解更多信息

编辑

在alter语句中,我错过了全文索引名称,它应该是:

ALTER TABLE table ADD FULLTEXT ft_index_name(title, description);


 类似资料:
  • 问题内容: 在C ++和/或Java中实现语音搜索的最有效方法是什么?通过语音搜索,我的意思是替换听起来相似的元音或辅音。这对于名字特别有用,因为有时人们的名字会有一些奇怪的拼写。 我认为替换元音和一些辅音可能是有效的。最好包含一些特殊情况,例如末尾的静音E或F和PH。最好在C ++中使用cstrings或字符串吗?将替换的值存储在内存中或在每次寻找内容时调用函数会更好吗? 问题答案: Sound

  • 问题内容: -我只是解析了一个大文件,然后创建了一个包含42.000个字符串/单词的列表。我想查询[针对此列表]以检查给定的单词/字符串是否属于它。所以我的问题是: 进行查找的最有效方法是什么? 第一种方法是对列表()进行排序,然后使用 这确实是微不足道的,我相信有更好的方法可以做到。我的目标是应用快速查找来查找给定字符串是否在此列表中。如果您对其他数据结构有任何想法,欢迎使用。但是,我现在想避免

  • 问题内容: 我想问一下在两个日期之间搜索数据的最有效(最快)方法是什么? 让我们考虑以下简单查询: “ Date_”列是DATETIME类型。 我尝试了不同的选择,例如: 和 和 实际上,此Select查询要复杂得多(具有联接和更多条件)。这只是简化版本。根据EXPLAIN,查询的执行方式没有区别。我需要说Date_列已建立索引。不幸的是,我无法测试实际的查询速度,因为我无法避免操作系统缓存,但是

  • 问题内容: 我有一个包含嵌套列表的列表,我需要知道在这些嵌套列表中搜索的最有效方法。 例如,如果我有 并且我必须搜索上面的整个列表,找到“ d”的最有效方法是什么? 问题答案: 使用列表推导,给出: 产量: 这也可以使用生成器来完成(如@AshwiniChaudhary所示) 根据以下评论进行更新: 这是相同的列表理解,但是使用了更具描述性的变量名: 列表理解部分中的循环构造等效于 并生成一个列表

  • 最近我接受了一次采访,他们问我一个“搜索”问题。问题是: 假设存在一个(正)整数数组,其中每个元素与其相邻元素相比要么是,要么是。 例: 现在搜索并返回其位置。 我给出了这样的答案: 将这些值存储在临时数组中,对它们进行排序,然后应用二进制搜索。 如果找到元素,则返回其在临时数组中的位置 (如果数字出现两次,则返回第一次出现的数字) 但是,他们似乎对这个答案不满意。 正确的答案是什么?

  • 问题内容: 现在,我执行两个单独的SQL语句,一个执行与搜索语句基本相同的条件。我并不是最擅长做出这些陈述,有时会有点慢,我想知道是否有更好的方法来做我所做的事情。可能只执行一个SQL语句,并在PHP中做更多工作?这是我有陈述的“搜索包含”示例。 在第二条语句中,您将看到Y之间的X,这部分是由第一行计数语句的结果计算得出的。 SQL行数: SQL搜索: 问题答案: 如果您要显示结果的总计数和分页计