MySQL中FIND_IN_SET(),IN()和LIKE区别

news/2024/10/16 19:23:59 标签: sql, 数据库, mysql

在 MySQL 中, FIND_IN_SET() 和 LIKE 都可以用于字符串的匹配查找,但它们有以下不同:

一、语法及功能

1.  FIND_IN_SET(str,strlist) :

  • 用于在以逗号分隔的字符串列表中查找特定字符串,并返回其位置。如果未找到则返回 0。
  • 例如, FIND_IN_SET('b','a,b,c') 会返回 2,表示字符串'b'在字符串列表'a,b,c'中的位置是第二个。

2.  LIKE :

  • 用于进行模式匹配,通常与通配符一起使用。常见的通配符有 % (代表零个或多个字符)和 _ (代表单个字符)。
  • 例如, WHERE column_name LIKE '%apple%' 会查找包含字符串'apple'的列值。

3. IN 

   用于判断一个值是否在一个指定的列表中。例如: column_name IN (value1, value2, value3) ,如果 column_name 的值等于列表中的任何一个值,则返回 true。

二、适用场景

1.  FIND_IN_SET() :

  • 适用于明确知道要在一个以逗号分隔的固定字符串列表中进行精确查找的情况。
  • 比如在存储多个标签或分类 ID 的字段中查找特定的标签或 ID。

2.  LIKE :

  • 更适合进行模糊查找,例如搜索包含特定关键词的文本内容。
  • 也可用于查找以特定字符串开头或结尾的内容。

3.IN()

  • 可以用于各种数据类型的列,只要列表中的值与列的数据类型匹配。

三、性能方面

1.  FIND_IN_SET() :

  • 当字符串列表较长时,性能可能会受到影响,特别是在大量数据的情况下。
  • 因为它需要解析整个字符串列表来查找匹配项。

2.  LIKE :

  • 使用通配符在开头进行匹配(如 LIKE '%apple%' )时,通常不能使用索引,可能导致全表扫描,性能较差。
  • 但如果通配符在结尾(如 LIKE 'apple%' ),则可以利用索引提高性能。

3.IN()

        在处理较小的固定列表时,性能通常较好。但如果列表非常大,可能会影响性能。

四、应用场景

1. IN :适用于明确的离散值列表的情况,比如在多个已知的选项中进行筛选。

2. FIND_IN_SET() :适用于存储在单个字符串字段中的逗号分隔值列表的情况,例如存储多个标签或分类的字符串。

3.LIKE 查找包含特定关键词的模糊搜索,可以使用 LIKE '%关键词%' 来查找包含该关键词的数据。

 


http://www.niftyadmin.cn/n/5708422.html

相关文章

DOS时代渐行渐远,而国产新型平台,却在悄然换代

可能就是有点儿念旧吧,没事干的时候,就爱把那些DOS年代的经典软件找出来摆弄摆弄。 虽说它们现在都是老古董了,但在咱们70后、80后的心里头,这些当年闪闪发光的软件宝贝,还是有着独一无二的位置,谁也替代不…

60个java常用的代码(能够帮助您更好地理解Java编程)

以下是60个常用的Java代码片段,涵盖了基础语法、常用类和一些实用功能: 基础语法 Hello World public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } } 变量声明 int number…

『网络游戏』客户端使用PESorket发送消息到服务器【14】

上一章服务器已经完成使用PESorket 现在我们将其导出在客户端中使用 生成成功后复制 粘贴到Unity项目中 进入Assets文件夹 粘贴两个.dll 创建脚本:ClientSession.cs 编写脚本: ClientSession.cs 编写脚本:GameStart.cs 将GameStart.cs脚本绑定在摄像机上 运行服务器 运行客户端…

UEFI学习笔记(十一):SMBIOS的概述与访问

UEFI学习笔记(十一):SMBIOS的概述与访问 一、概述1、硬件信息获取:2、系统管理:3、与固件的交互: 二、SMBIOS结构三、SMBIOS的访问1、获取 SMBIOS 入口点2、初始化和检查入口点3、访问 SMBIOS 结构表4、遍历…

IDEA如何用maven打包(界面和命令两种方式)

前言 我们在使用IDEA开发时,如果是springboot项目的话,一般是用maven来管理我们的依赖的。然后,当我们开发完成之后,就需要打包部署了。 那么,我们应该如何打包呢? 如何打包(jar包&#xff09…

Linux防火墙与SElinux

文章目录 一、防火墙介绍二、iptables和firewalld的区别操作方式:配置层面:性能和管理: 三、iptables与firewalld的优缺点iptablesfirewalld 四、iptables的工作流程五、firewalld的工作流程六、iptables安装与使用6.1、关闭firewalld服务6.2…

C++—#pragam once

C—#pragama once #pragma once 是一个非标准的预处理指令,但它在许多现代编译器中都被广泛支持,包括GCC、Clang和MSVC(Microsoft Visual C)。这个指令的目的是防止头文件被多次包含(include)到同一个源文…

尚硅谷rabbitmq 2024 Federation配置 第60节答疑

rabbitmq联邦队列怎么做 要在 RabbitMQ 中设置联邦队列(Federated Queues),你需要遵循以下步骤。联邦队列允许你在不同的 RabbitMQ 实例之间共享队列,从而实现消息的分布式处理和高可用性。 ### 步骤 1:安装 RabbitMQ…