4
  1. 什么是索引?
  2. 什么是全文?

我知道这两个问题的答案,但我无法以确切的方式向面试官透露这些答案:

  • 索引意味着类似于书中的索引
  • 全文搜索字符串的意思

请给我每个问题的非常简单的定义吗?

4

3 回答 3

6

索引,是创建索引的过程。索引是一种结构,它允许 SQL(或更一般地说是 DBMS 或搜索引擎)以非常有效的方式定位记录,这些记录基于它们包含的一个(或多个)字段的值。

例如,数据库可能包括包含学生记录的表,其中包括学生 ID、姓名、出生日期、电话号码……通过在电话号码上创建索引,我们可以根据电话号码搜索学生。在没有索引的情况下,系统会找到相同的记录,但此操作将通过查看每条记录并与所需的电话号码进行比较来进行。


全文索引是为一个(或多个包含文本的字段)创建索引的过程。与基于将字段的完整值(或可能是简单的正则表达式)与所需搜索值进行比较的常规索引不同,全文索引可以根据在字段中找到的单词来定位记录。

例如,书目数据库可能包含描述书籍的记录,其字段包括 ISBN、作者、标题、类型、价格...)。字段标题上的全文索引(有时称为“目录”)将允许在通过说出单词“man”进行搜索时有效地定位标题为“老人与海”的书。

全文引擎通常具有对与文本有关的语言概念的内置且可参数化的“理解”。例如,“噪声词”(也称为“停用词”)是文本中经常出现的词(例如“the”、“and”、“of”、“in”,在英语中)可能会被忽略,目的是最小化索引大小并使搜索更有选择性的单词更有效。此外,全文引擎可能知道单词的各种语法形式,说出单词的单数和复数形式(例如 Inch and Inches、Foot and Feet、Cat and Cats)或动词的变位(例如 Catch、Catching和捕获或解释,解释,解释)。由于这种语法意识,
全文引擎通常还公开允许用户指定所需搜索的特定元素的搜索语言/语法。例如,在单词“man”的 5 个单词内搜索单词“sea”。或者找到“湖”或“海洋”这个词和“水”等词。

于 2010-03-12T05:44:35.580 回答
3

mysql 中的索引是从列中的每个值(或一组列中的值)到包含该列中该值的行(或一组列中的那些值)的映射。

列上的全文索引是从每个单词(通常由空格分隔)到包含该单词的行集的映射。

正常索引:id:1 "bar" id:2 "foo baz"

搜索“foo”-> 没有结果。搜索“foo baz”-> id 为 2 的行 搜索“bar”-> id 为 1 的行

全文索引:id:1 "bar" id:2 "foo baz"

搜索“foo”-> 具有 id:2 的行 搜索“foo baz”-> 具有 id:2 的行 搜索“bar”-> 具有 id:1 的行

于 2010-03-12T05:44:06.313 回答
0
  1. 索引意味着除了您要索引的数据之外,还有一种方法可以有效地获取该数据。此快捷方式是 B 树。索引列读取速度更快(已经解释过)但写入速度较慢,因为必须更新 B 树。
于 2010-03-12T06:17:34.297 回答