博客
关于我
MySQL必知必会 (18)
阅读量:728 次
发布时间:2019-03-21

本文共 1350 字,大约阅读时间需要 4 分钟。

18.1 理解全文本搜索

全文本搜索是指能够在表中查找包含特定关键字、短语或相关内容的行的功能。在MySQL中,这一功能通过全文本索引实现,而不仅仅是简单的字符串匹配。

全文本搜索的基础

并非所有数据库引擎都支持全文本搜索,但在MySQL中,MyISAM引擎支持,而InnoDB引擎则不支持。此外,LIKE子句和正则表达式是实现全文本搜索的重要工具。

LIKE子句通过通配符(如%、_、?等)实现部分字段匹配,可用于查找包含特定值或特定模式的行。而正则表达式则提供了更高级的匹配功能,可用于编写复杂的查询条件。

启用全文本搜索支持

要进行全文本搜索,需要对需要搜索的列建立全文本索引。在创建表时,可以在CREATE TABLE语句中添加FULLTEXT子句,指定需要索引的列名。

例如:

CREATE TABLE books (    id INT PRIMARY KEY,    title FULLTEXT,    author VARCHAR(255),    content TEXT);

此外,可以在表创建完成后通过执行ALTER TABLE命令添加全文本索引(使用ADD COLUMN子句)。

需要注意的是,确保在对表结构进行修改时,数据已经被成功导入。手动在导入数据后立即定义全文本索引可以显著提升性能,因为它避免了在每次数据插入时都对索引进行重建。

使用全文本搜索

在对表启用了全文本索引后,就可以利用Match()和Against()函数进行全文本搜索。

Match()函数用于指定需要搜索的列,而Against()函数用于指定查询条件,包括关键字和其它相关信息。

例如:

SELECT * FROM books WHERE MATCH(title) AGAINST('php数据库教程');

查询扩展

为了提高全文本搜索的效率,MySQL提供了查询扩展功能。查询扩展的核心原理是对搜索结果进行双重扫描:

  • 首先,MySQL执行初始的全文本搜索,找出所有与查询条件匹配的行。
  • 然后,MySQL对这些匹配行的文本内容进行分析,提取所有相关的关键词。
  • 最后,MySQL再次对全文本进行搜索,这次不仅要匹配初始条件,还要考虑提取的相关关键词。
  • 这种双重扫描机制确保了全文本搜索的准确性,同时也提高了搜索效率。

    布尔文本搜索

    即使没有定义全文本索引,也可以通过使用LIKE和正则表达式来手动实现布尔文本搜索,只是性能可能受到影响。

    例如,可以使用正则表达式结合LIKE子句来实现更加复杂的匹配需求:

    SELECT * FROM articles WHERE content LIKE '%比赛结果相关内容%'   OR content LIKE '%最新防火墙配置%'   OR content LIKE '%网络安全解决方案';

    注意事项

    • 定义全文本索引后,MySQL会自动维护索引。因此,在数据小范围时,可以选择在表创建完成后立即对索引进行优化。
    • 避免在导入数据时直接使用FULLTEXT索引。如果必须导入数据后立即启用全文本索引,请确保此时表中数据已被成功插入。

    通过正确配置全文本索引并合理使用Match()和Against()函数,可以显著提升数据库的搜索性能,满足复杂的查询需求。

    转载地址:http://pocgz.baihongyu.com/

    你可能感兴趣的文章
    Mysql: 对换(替换)两条记录的同一个字段值
    查看>>
    mysql:Can‘t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock‘解决方法
    查看>>
    MYSQL:基础——3N范式的表结构设计
    查看>>
    MYSQL:基础——触发器
    查看>>
    Mysql:连接报错“closing inbound before receiving peer‘s close_notify”
    查看>>
    mysqlbinlog报错unknown variable ‘default-character-set=utf8mb4‘
    查看>>
    mysqldump 参数--lock-tables浅析
    查看>>
    mysqldump 导出中文乱码
    查看>>
    mysqldump 导出数据库中每张表的前n条
    查看>>
    mysqldump: Got error: 1044: Access denied for user ‘xx’@’xx’ to database ‘xx’ when using LOCK TABLES
    查看>>
    Mysqldump参数大全(参数来源于mysql5.5.19源码)
    查看>>
    mysqldump备份时忽略某些表
    查看>>
    mysqldump实现数据备份及灾难恢复
    查看>>
    mysqldump数据库备份无法进行操作只能查询 --single-transaction
    查看>>
    mysqldump的一些用法
    查看>>
    mysqli
    查看>>
    MySQLIntegrityConstraintViolationException异常处理
    查看>>
    mysqlreport分析工具详解
    查看>>
    MySQLSyntaxErrorException: Unknown error 1146和SQLSyntaxErrorException: Unknown error 1146
    查看>>
    Mysql_Postgresql中_geometry数据操作_st_astext_GeomFromEWKT函数_在java中转换geometry的16进制数据---PostgreSQL工作笔记007
    查看>>