`

mysql 全文索引(fulltext)学习

 
阅读更多
使用索引是数据库性能优化的必备技能之一。在MySQL数据库中,有四种索引:聚集索引(主键索引)、普通索引、唯一索引以及我们这里将要介绍的全文索引(FULLTEXT INDEX)。

全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。它能够利用「分词技术「等多种算法智能分析出文本文字中关键字词的频率及重要性,然后按照一定的算法规则智能地筛选出我们想要的搜索结果。在这里,我们就不追根究底其底层实现原理了,现在我们来看看在MySQL中如何创建并使用全文索引。

在MySQL中,创建全文索引相对比较简单。例如,我们有一个文章表(article),其中有主键ID(id)、文章标题(title)、文章内容(content)三个字段。现在我们希望能够在title和content两个列上创建全文索引,article表及全文索引的创建SQL语句如下:

--创建article表
CREATE TABLE article (
    id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    title VARCHAR(200),
    content TEXT,
    FULLTEXT (title, content) --在title和content列上创建全文索引
);

上面就是在创建表的同时建立全文索引的SQL示例。此外,如果我们想要给已经存在的表的指定字段创建全文索引,同样以article表为例,我们可以使用如下SQL语句进行创建:

--给现有的article表的title和content字段创建全文索引
--索引名称为fulltext_article
ALTER TABLE article
ADD FULLTEXT INDEX fulltext_article (title, content)

在MySQL中创建全文索引之后,现在就该了解如何使用了。众所周知,在数据库中进行模糊查询是使用LIKE关键字进行查询,例如:

SELECT * FROM article WHERE content LIKE '%查询字符串%'
那么,我们使用全文索引也是这样用的吗?

当然不是,我们必须使用特有的语法才能使用全文索引进行查询。例如,我们想要在article表的title和content列中全文检索指定的查询字符串,可以如下编写SQL语句:

SELECT * FROM article WHERE MATCH(title, content) AGAINST('查询字符串')

搜索语法规则:
+   一定要有(不含有该关键词的数据条均被忽略)。
-   不可以有(排除指定关键词,含有该关键词的均被忽略)。
>   提高该条匹配数据的权重值。
<   降低该条匹配数据的权重值。
~   将其相关性由正转负,表示拥有该字会降低相关性(但不像 - 将之排除),只是排在较后面权重值降低。
*   万用字,不像其他语法放在前面,这个要接在字符串后面。
" " 用双引号将一段句子包起来表示要完全相符,不可拆字。

强烈注意:MySQL自带的全文索引只能用于数据库引擎为MyISAM的数据表,如果是其他数据引擎,则全文索引不会生效。此外,MySQL自带的全文索引只能对英文进行全文检索,目前无法对中文进行全文检索。如果需要对包含中文在内的文本数据进行全文检索,我们需要采用Sphinx(斯芬克斯)/Coreseek技术来处理中文。本站将会在后续文章中对Sphinx以及Coreseek进行介绍。

备注1:目前,使用MySQL自带的全文索引时,如果查询字符串的长度过短将无法得到期望的搜索结果。MySQL全文索引所能找到的词的默认最小长度为4个字符。另外,如果查询的字符串包含停止词,那么该停止词将会被忽略。

备注2:如果可能,请尽量先创建表并插入所有数据后再创建全文索引,而不要在创建表时就直接创建全文索引,因为前者比后者的全文索引效率要高。

参考:https://www.cnblogs.com/wherein/p/7525687.html
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    MySQL全文索引应用简明教程.pdf

    MySQL全文索引是一种高效检索文本数据的技术,尤其适用于大数据量的文本字段搜索。在MySQL中,全文索引主要应用于MyISAM和InnoDB两种表引擎,尽管MyISAM是传统选择,但自MySQL 5.6以后,InnoDB也开始支持全文索引。 ...

    mysql 全文索引

    MySQL全文索引是一种高效搜索大量文本数据的方法,它允许用户以自然语言的形式进行查询,而不仅仅是基于精确匹配。全文索引在数据库管理中扮演着重要角色,尤其在处理新闻、文章、博客等含有大量文本信息的数据时。...

    MySQL全文索引应用简明教程[参考].pdf

    MySQL全文索引是一种高效检索文本数据的机制,尤其适用于大数据量的文本检索场景。全文索引在MySQL中主要用于提升对长文本字段的搜索性能,它能够理解查询字符串中的语义,找出与之最相关的记录。在MySQL 5.6之前,...

    MySQL创建全文索引分享

    MySQL全文索引是一种提高数据库查询性能的技术,尤其适用于大规模文本数据的检索。它通过分词技术和特定的算法,分析文本中的关键词频率和重要性,从而快速定位到匹配的记录。在MySQL中,全文索引主要应用于MYISAM...

    mysql 全文模糊查找 便捷解决方案

    在MySQL中,全文索引主要通过`MATCH AGAINST`语句实现,可以配合`FULLTEXT`关键字在表的指定列上创建。例如: ```sql CREATE FULLTEXT INDEX idx_title ON articles(title); ``` 这样就在`articles`表的`title`列上...

    Laravel开发-mysql-fulltext-laravel

    `$table-&gt;fullText('content')`这行代码就是创建全文索引的关键。 **使用全文索引进行搜索** 创建了全文索引后,我们可以在Laravel的控制器中使用`whereRaw`或`where`方法来进行全文搜索。例如: ```php use App\...

    基于mysql全文索引的深入理解

    MySQL全文索引是一种高效检索大量文本数据的机制,尤其适用于大数据搜索场景。在MySQL 5.5.24版本中,全文索引主要用于提升文本字段的搜索效率,它通过分词技术将文本拆分成可搜索的词项。全文索引在MyISAM存储引擎...

    mysql的索引优化

    - 修改表添加全文索引:`ALTER TABLE 表名 ADD FULLTEXT INDEX [索引名] (列名列表);` #### 五、索引的选择与应用 1. **单列索引与多列索引**:索引可以是针对单个列的,也可以是多个列的组合。多列索引是指基于...

    MySQL全文索引应用简明教程

    MySQL全文索引是一种高效检索文本数据的机制,它在处理大量文本数据的查询时能显著提升性能。全文索引在数据库设计中起着至关重要的作用,尤其对于那些需要执行复杂文本搜索的应用程序。 首先,创建全文索引需要...

    Mysql全文搜索match against的用法

    MySQL全文搜索功能主要依赖于`MATCH()`和`AGAINST()`两个函数,用于在MyISAM表类型的字段上执行高效的文本搜索。以下是对标题和描述中所述知识点的详细说明: 1. **全文搜索的前提条件** - 表的存储引擎必须是...

    mysql中创建各种索引的语句整理.pdf

    添加FULLTEXT(全文索引) 添加多列索引 ) mysql&gt;ALTER TABLE `table_name` ADD INDEX index_name (`column1`, `column2`, 、where条件列 、排序列或者分组列 、主键本身就是索引,无需再次...

    mysql添加索引.pdf

    4. **全文索引**:适用于文本数据,提供全文搜索功能,例如在新闻文章或产品描述中查找特定关键词。 创建这些索引的SQL语句如【部分内容】所示,可以通过ALTER TABLE语句添加到表中。例如,创建主键索引使用`ALTER ...

    MySQL创建索引,查看以及删除

    4. 全文索引(Fulltext Index):用于全文搜索,仅适用于MyISAM和InnoDB存储引擎。 5. 复合索引(Composite Index):由多个列组成的索引,按列的顺序进行排序。 创建索引的基本语法如下: ```sql CREATE INDEX ...

    MySQL 索引最佳实践

    - **全文索引(FULLTEXT索引)**:MyISAM和InnoDB(自MySQL 5.6版本起)支持全文索引。 #### B树及其变体 B树及其变体(如B+树)是广泛使用的索引类型。它们具有相似的属性,可以加速特定类型的查询操作。对于磁盘...

    MySQL索引最佳实践

    - **适用场景**:MyISAM和InnoDB存储引擎支持全文索引,尤其在MySQL 5.6及以上版本。 - **特点**:专门用于全文检索,支持复杂的全文检索语法。 #### 三、MyISAM与InnoDB中的索引差异 - **MyISAM中的索引**: - ...

    MySQL索引分析和优化.pdf

    - 创建表时指定全文索引:`CREATE TABLE tablename ([...], FULLTEXT (列名列表));` - 通过`ALTERTABLE`或`CREATE INDEX`命令创建全文索引。 5. **单列索引与多列索引**:索引可以针对单个列创建(单列索引),也...

    如何在MySQL中提高全文搜索效率

    MySQL全文搜索支持两种模式:标准模式和布尔模式。标准模式提供最自然的搜索体验,而布尔模式允许更复杂的查询构造,如排除特定词汇或要求必须出现的词汇。 全文索引的维护也很重要。随着数据的增加,定期重建索引...

    Laravel开发-laravel-fulltext-rebuild

    通过`laravel-fulltext-rebuild`项目,开发者可以更加高效地管理和维护Laravel应用中的MySQL全文索引,提升应用的搜索体验。在实际使用过程中,应根据具体业务需求调整配置和使用策略,确保最佳的性能和稳定性。

Global site tag (gtag.js) - Google Analytics