MySQL的模糊查询主要通过两个函数实现:LIKE和LOCATE。然而,在InnoDB索引中,使用"%"字符会导致索引失效,这限制了模糊查询的效率。对于需要进行全文查找的场景,如搜索引擎和电子商务网站的查询需求,InnoDB的全文检索功能提供了另一种高效解决方案。全文检索技术主要依赖倒排索引(Inverted Index)实现,它存储...
mysql中模糊查询like和locate函数谁的效率高,为什么?
MySQL的模糊查询主要通过两个函数实现:LIKE和LOCATE。然而,在InnoDB索引中,使用"%"字符会导致索引失效,这限制了模糊查询的效率。对于需要进行全文查找的场景,如搜索引擎和电子商务网站的查询需求,InnoDB的全文检索功能提供了另一种高效解决方案。
全文检索技术主要依赖倒排索引(Inverted Index)实现,它存储了单词及其在文档中位置的映射。倒排索引通过在辅助表中组织数据,使得在全文中查找特定单词变得简单高效。倒排索引有两种表现形式:一种是单词及其在多个文档中的位置,另一种是(文档ID,位置)的对。尽管full inverted index占用更多空间,但能更好地定位数据并提供更丰富的搜索特性。
在MySQL中,创建全文索引有两种方式:在创建表时或在已创建的表上。使用全文索引进行查询时,可以通过MATCH() AGAINST()语法实现,该语法支持自然语言搜索、布尔搜索和查询扩展搜索。每种搜索类型都有其特点和使用场景。
自然语言搜索将搜索字符串解释为短语,并查找包含特定关键字的文档。自然语言搜索默认模式下,查询结果包括标题和正文中出现关键字的行数量。通过SQL语句可以查询相关性,全文检索的计算依据四个条件。InnoDB引擎的全文检索还会考虑参数innodb_ft_min_token_size和innodb_ft_max_token_size控制查询字符长度,若长度小于或大于指定值,则忽略该词搜索。
布尔搜索允许使用特殊查询语言规则解释搜索字符串,包含要搜索的词及其指定的运算符。例如,查询要求同时存在或不存在某个单词。通过SQL语句可以实现不同的布尔模式,如使用"+"和"-"标识单词必须存在或不存在。
查询扩展搜索是对自然语言搜索的扩展,它允许在关键词太短时查询隐含知识。通过在查询语句中添加WITH QUERY EXPANSION,可以开启全文检索的隐含知识查询,分为两个阶段。示例展示了查询扩展搜索的使用,包括查询相关结果和非相关性查询的处理。
删除全文索引也有两种方式:直接删除或通过alter table语句实现。2024-09-09