【问题标题】:define mysql indexing定义mysql索引
【发布时间】:2011-01-26 16:55:27
【问题描述】:
  1. 什么是索引?
  2. 什么是全文?

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

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

请给我这些问题的简单定义吗?

【问题讨论】:

  • 引用 mySQL 有什么特别的原因吗?就其本身而言,Index 和 FullText 概念对 SQL 及其他所有事物都是通用的。是否隐含期望提供 mySQL 的具体细节?
  • 我正在研究 mysql,所以我选择了 mysql 标签。

标签: sql mysql vocabulary


【解决方案1】:

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

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


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

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

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

【讨论】:

【解决方案2】:

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

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

正常指数: id:1 "酒吧" id:2 "foo baz"

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

全文索引: id:1 "酒吧" id:2 "foo baz"

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

【讨论】:

  • 嗨,如果我为单个字段创建索引和全文,会发生什么,哪个可以索引或全文,如果我的问题不清楚请告诉我..
  • 如果我的引擎是innodb意味着,我不能使用全文,那么只有索引是怎样的方式......现在告诉我哪个有效,索引或全文
  • @Bharanikumar:“哪个可以工作索引或全文”这取决于。假设您在列x 上有一个普通索引和一个全文索引:如果您使用SELECT x,y,z FROM table WHERE MATCH (x) AGAINST ('searchterm' IN BOOLEAN MODE),则将使用全文索引。如果您使用SELECT x,y,z FROM table WHERE x LIKE 'searchterm%',将使用普通索引。
【解决方案3】:
  1. 索引意味着除了您要索引的数据之外,还有一种方法可以有效地获取该数据。此快捷方式是 B 树。索引列读取速度更快(已解释)但写入速度较慢,因为必须更新 B 树。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 2012-12-08
    相关资源
    最近更新 更多