表索引——全文索引

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 表索引——全文索引

前言


全文索引主要对字符串类型建立基于分词的索引,主要是基于CHAR、VARCHAR和TEXT的字段上,以便能够更加快速地查询数据量较大的字符串类型的字段。


       全文索引以词为基础的,MySQL默认的分词是所有非字母和数字的特殊符号都是分词符。


       MySQL从3.23.23版本开始支持全文索引,MySQL5.6以前只能在存储引擎为MyISAM的数据表上创建全文索引,5.6之后InnoDB开始支持全文索引(5.7之后支持中文全文索引) 。在默认情况下,全文索引的搜索执行方式为不区分大小写,如果全文索引所关联的字段为二进制数据类型,就以区分大小写的搜索方式执行。


一、全文索引

1.创建表时定义索引


CREATE TABLE tablename(


   propname1 type1,


   propname2 type2,


   ……


   propnamen type..n,


   FULLTEXT INDEX | KEY


   [indexname] (propnamen [(length)] ) );



mysql> create database school;   #创建数据库school


mysql> use school;   #选择数据库school


mysql>create table class(id int, name varchar(128) UNIQUE, teacher varchar(64),comment varchar(1024),FULLTEXT INDEX index_comm(comment));       #创建表class, 并建立为comment 字段为全文索引


mysql> insert into class values(1,'1班','Martin','我是一个兵,来自老百姓!');  # 插入记录1


mysql> insert into class values(2,'2班','Rock','此班主任毕业自唐僧系');   # 插入记录2


mysql> insert into class values(3,'3班','Janny','I''m Miss Zhang.');   #插入记录3


mysql> select * from class where match(comment) AGAINST('我是一个兵');#利用全文检索索引快速查


2.已存在的表上创建索引

方法1:执行 create 语句


在MySQL中创建全文索引除了通过SQL语句FULLTEXT INDEX来实现外,还可以通过SQL语句CREATE FULLTEXT INDEX来实现,其语法形式如下:


   CREATE FULLTEXT INDEX indexname


   ON tablename( propname1 [ ( length ) ] );


       在上述语句中,关键字CREATE FULLTEXT INDEX表示用来创建全文索引。


       如下例表已存在,可通过CREATE语句创建全文索引:

mysql> create database school;   #创建数据库school


mysql> use school;   #选择数据库school


mysql> create table class(id int, name varchar(128) UNIQUE, teacher varchar(64));       #创建表class, 并建立为id 字段索引


mysql> create FULLTEXT index index_teacher on class(teacher );  #追加全文索引


mysql> show create table class;  #查看表定义  


方法2:执行alter table 语句

除了上述两种方式来创建全文索引外,在MySQL中创建全文索引还可以通过SQL语句ALTER来实现,其语法形式如下:


   ALTER TABLE tablename


   ADD FULLTEXT INDEX|KEY indexname(propname [(length)]);


3.使用场景

根据全文索引字段进行全文检索数据:

SELECT * FROM 表名WHERE MATCH(`列名`) AGAINST('关键字');

mysql> create database school;   #创建数据库school


mysql> use school;   #选择数据库school


mysql> mysql> create table class(id int, name varchar(128) UNIQUE, teacher varchar(64),info varchar(1024),FULLTEXT INDEX index_des(info));       #创建表class, 并建立为info 字段为全文索引


mysql> insert into class values(1,'1班','Martin','我是一个兵,来自老百姓!');  # 插入记录1


mysql> insert into class values(2,'2班','Rock','此班主任毕业自唐僧系');   # 插入记录2


mysql> insert into class values(3,'3班','Janny','I'm Miss Zhang.');   # 插入记录3


mysql> select * from class where match(teacher) AGAINST('我是一个兵');#根据id查询记录

二、MySQL8 中文分词支持

       配置文件my.ini(Windows 10默认路径: C:\ProgramData\MySQL\MySQL Server 8.0) 中增加如下配置项,同时重启MySQL80 服务:

mysql> create database school;   #创建数据库school


mysql> use school;   #选择数据库school


mysql> mysql> create table class(id int, name varchar(128) UNIQUE, teacher varchar(64),comment varchar(1024),FULLTEXT INDEX index_des(comment) with parser   ngram);       #创建表class, 并建立为comment 字段为全文索引


mysql> insert into class values(1,'1班','Martin','我是一个兵,来自老百姓!');  # 插入记录1


mysql> insert into class values(2,'2班','Rock','此班主任毕业自唐僧系');   # 插入记录2


mysql> insert into class values(3,'3班','Janny','I''m Miss Zhang.');   #插入记录3


mysql> select * from class where match(comment) AGAINST('百姓');#利用全文检索索引快速查询记录


mysql> select * from class where match(comment) AGAINST('唐僧');#利用全文检索索引快速查询记录

总结

以上

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
27天前
|
存储 关系型数据库 数据库
什么是索引
【10月更文挑战第15天】什么是索引
|
3月前
|
TensorFlow 算法框架/工具 索引
索引
【8月更文挑战第13天】索引。
27 1
|
6月前
|
存储 NoSQL 关系型数据库
索引!索引!!索引!!!到底什么是索引?
**索引是数据库中的数据结构,类似书籍目录,加速数据查找和访问。优点包括提升查询性能、数据检索速度、支持唯一性约束及优化排序和连接操作。缺点在于增加写操作开销、占用存储空间、高维护成本和过多索引可能降低性能。常见的索引类型有单值、复合、唯一、聚集和非聚集索引等,实现方式涉及B树、B+树和哈希表。B树和B+树适合磁盘存储,B+树尤其适用于范围查询,哈希索引则适用于快速等值查询。**
56 0
|
6月前
|
SQL 关系型数据库 MySQL
关于索引的使用
关于索引的使用
|
关系型数据库 MySQL 数据库
了解和认识索引
了解和认识索引。
52 0
|
数据库 索引
表索引——普通索引
表索引——普通索引
表索引——唯一索引
表索引——唯一索引
|
SQL 关系型数据库 MySQL
表索引——多列索引
前言 多列索引,是指在创建索引时所关联的字段不是一个字段,而是多个字段,虽然可以通过所关联的字段进行查询,但是只有查询条件中使用了所关联字段中的第一个字段,多列索引才会被使用。
|
数据库 索引
请注意这些情况下,你的索引会不生效!
数据库性能优化是确保系统高效运行的关键要素之一。而索引作为提升数据库查询性能的重要工具,在大部分情况下都能发挥显著的作用。然而,在某些情况下,索引可能会失效或不起作用,导致查询性能下降,甚至引发性能瓶颈。
|
存储 索引
表索引
表索引
113 0