mysqlfulltext长度为1

mysqlfulltext长度为1,第1张

最近在复习数据库索引部分,看到了 fulltext,也即全文索引,虽然全文索引在平时的业务中用到的不多,但是感觉它有点儿意思,所以花了点时间研究一下,特此记录。

引入

概念

通过数值比较、范围过滤等就可以完成绝大多数我们需要的查询,但是,如果希望通过关键字的匹配来进行查询过滤,那么就需要基于相似度的查询,而不是原来的精确数值比较。全文索引就是为这种场景设计的。

你可能会说,用 like + % 就可以实现模糊匹配了,为什么还要全文索引?like + % 在文本比较少时是合适的,但是对于大量的文本数据检索,是不可想象的。全文索引在大量的数据面前,能比 like + % 快 N 倍,速度不是一个数量级,但是全文索引可能存在精度问题。

你可能没有注意过全文索引,不过至少应该对一种全文索引技术比较熟悉:各种的搜索引擎。虽然搜索引擎的索引对象是超大量的数据,并且通常其背后都不是关系型数据库,不过全文索引的基本原理是一样的。

版本支持

开始之前,先说一下全文索引的版本、存储引擎、数据类型的支持情况

MySQL 5.6 以前的版本,只有 MyISAM 存储引擎支持全文索引;

MySQL 5.6 及以后的版本,MyISAM 和 InnoDB 存储引擎均支持全文索引

只有字段的数据类型为 char、varchar、text 及其系列才可以建全文索引。

测试或使用全文索引时,要先看一下自己的 MySQL 版本、存储引擎和数据类型是否支持全文索引。

*** 作全文索引

索引的 *** 作随便一搜都是,这里还是再啰嗦一遍。

创建

创建表时创建全文索引

create table fulltext_test (

id int(11) NOT NULL AUTO_INCREMENT,

content text NOT NULL,

tag varchar(255),

PRIMARY KEY (id),

FULLTEXT KEY content_tag_fulltext(content,tag) // 创建联合全文索引列

) ENGINE=MyISAM DEFAULT CHARSET=utf8

在已存在的表上创建全文索引

create fulltext index content_tag_fulltext

on fulltext_test(content,tag)

通过 SQL 语句 ALTER TABLE 创建全文索引

alter table fulltext_test

add fulltext index content_tag_fulltext(content,tag)

修改

修改个 O,直接删掉重建。

删除

直接使用 DROP INDEX 删除全文索引

drop index content_tag_fulltext

on fulltext_test

通过 SQL 语句 ALTER TABLE 删除全文索引

alter table fulltext_test

drop index content_tag_fulltext

使用全文索引

和常用的模糊匹配使用 like + % 不同,全文索引有自己的语法格式,使用 match 和 against 关键字,比如

select * from fulltext_test

where match(content,tag) against('xxx xxx')

MySQL全文索引 FULLTEXT索引和like的区别

fulltext ,其实是一个索引,like语句很难用索引,所以提升了效率。

fulltext ,支持多个字段检索。

搜索功能一般都用带有中文分词的开源产品,像xunsearch。

一般小项目用like就行了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8357499.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存