当前位置: 首页 > news >正文

【MySQL】14. 全文索引(选学)

全文索引的创建
当对文章字段或有大量文字的字段进行检索时,会使用到全文索引。
MySQL提供全文索引机制,但是有要求,要求表的存储引擎必须是MyISAM,而且默认的全文索引支持英文,不支持中文。
(为啥一定要用MyISAM呢? – 因为InnoDB不支持全文索引)
如果对中文进行全文检索,可以使用sphinx的中文版(coreseek)。

CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT,
FULLTEXT (title,body)
)engine=MyISAM;
INSERT INTO articles (title,body) VALUES
('MySQL Tutorial','DBMS stands for DataBase ...'),
('How To Use MySQL Well','After you went through a ...'),
('Optimizing MySQL','In this tutorial we will show ...'),
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
('MySQL vs. YourSQL','In the following database comparison ...'),
('MySQL Security','When configured properly, MySQL ...');

这里的省略号表示的都是大文本的意思

查询有没有database数据
如果使用如下查询方式,虽然查询出数据,但是没有使用到全文索引

mysql> select * from articles where body like '%database%';
+----+-------------------+------------------------------------------+
| id |             title |                                     body |
+----+-------------------+------------------------------------------+
|  1 |    MySQL Tutorial |             DBMS stands for DataBase ... |
|  5 | MySQL vs. YourSQL | In the following database comparison ... |
+----+-------------------+------------------------------------------+

可以用explain工具看一下,是否使用到索引

mysql> explain select * from articles where body like '%database%'\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: articles
type: ALL
possible_keys: NULL
key: NULL <== keynull表示没有用到索引
key_len: NULL
ref: NULL
rows: 6
Extra: Using where
1 row in set (0.00 sec)

如何使用全文索引呢?

mysql> SELECT * FROM articles-> WHERE MATCH (title,body) AGAINST ('database');
+----+-------------------+------------------------------------------+
| id |             title |                                     body |
+----+-------------------+------------------------------------------+
|  5 | MySQL vs. YourSQL | In the following database comparison ... |
|  1 |    MySQL Tutorial |             DBMS stands for DataBase ... |
+----+-------------------+------------------------------------------+

通过explain来分析这个sql语句

mysql> explain SELECT * FROM articles WHERE MATCH (title,body) AGAINST
('database')\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: articles
type: fulltext
possible_keys: title
key: title <= key用到了title
key_len: 0
ref:
rows: 1
Extra: Using where

查询索引

  • 第一种方法: show keys from 表名
mysql> show keys from goods\G
*********** 1. row ***********
Table: goods <= 表名
Non_unique: 0 <= 0表示唯一索引
Key_name: PRIMARY <= 主键索引
Seq_in_index: 1
Column_name: goods_id <= 索引在哪列
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE <= 以二叉树形式的索引
Comment:
1 row in set (0.00 sec)

第二种方法: show index from 表名;
第三种方法(信息比较简略): desc 表名;

struct page
{struct page *next;string page *prev;char buffer[NUM];
};---16KB , new page,
http://www.lryc.cn/news/326915.html

相关文章:

  • C++实现FFmpeg音视频实时拉流并播放
  • 国内ip切换app,让切换ip变得简单
  • 阿里云倚天服务器是什么?倚天服务器c8y、g8y和r8y详细介绍
  • ip地址开发场景问题
  • 【功能实现】新年贺卡(蓝桥)
  • 【Redis教程0x08】详解Redis过期删除策略内存淘汰策略
  • 鸿蒙开发 TypeScript 基础语法
  • uniapp 未配置appkey或配置错误的解决
  • 【Android】【Bluetooth Stack】蓝牙电话协议之拨打电话分析(超详细)
  • 记录关于智能家居的路程的一个bug___Segmentation fault(段错误)
  • 由浅到深认识Java语言(39):网络编程
  • PCL 彩色点云RGB转灰度并显示
  • RHEL9部署Docker环境
  • Vue3.0云里雾里
  • idea类已经存在却报错
  • MySQL---视图
  • 策略路由-IP-Link-路由协议简介
  • 数位五五(Java)
  • 蓝桥杯G431RBT6——定时器中使用led冲突以及led与lcd冲突等一系列问题
  • 物联网(IoT)常用的通信协议
  • 关于C/C++,Linux/MacOS/Windows 平台虚拟内存分配
  • 如何在服务器上传/下载文件
  • C++ 之多态虚函数原理及应用
  • 亮数据——让你的IP走出去,让价值返回来
  • spring boot-引入Redis并封装redistemplate操作工具类
  • android 11 SystemUI 状态栏打开之后的界面层级关系说明之一
  • C#___锁(lock)
  • JAVA的sort用法详解(二维数组排序,List<>排序,lambada表达式,自定义类型排序)
  • 数据分析能力模型分析与展示
  • BUG未解之谜01-指针引用之谜