find_in_set

2023-05-16

1.in查询相当于多个or条件的叠加,例如:

select * from user where user_id in (1,2,3);
等效于
select * from user where user_id = 1 or user_id = 2 or user_id = 3;
not in与in相反,如下
select * from user where user_id not in (1,2,3);
等效于
select * from user where user_id != 1 and user_id != 2 and user_id != 3;

1.find_in_set基本语法

FIND_IN_SET(str,strlist)

str 要查询的字符串,strlist 字段名 参数以”,”分隔 如 (1,2,6,8)
如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。

+----+---------+-----------+-------------+
| id | user_id | follow_id | follow_time |
+----+---------+-----------+-------------+
| 13 | 15      | 16,15     |  1478096138 |
| 14 | 15      | 17        |  1478177725 |
| 15 | 15      | 19        |  1478181035 |
+----+---------+-----------+-------------+

比如这张表,SELECT * from test where FIND_IN_SET('5',follow_id);这样是查不到的,返回值为null,因为follow_id中没有”5”这个值,它不同于 like 模糊查询,它是以“,”来分隔值

like是广泛的模糊匹配,字符串中没有分隔符,Find_IN_SET 是精确匹配,字段值以英文”,
”分

MySQL中原型为:FIND_IN_SET(str,strlist)。 假如字符串str 在由N 子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。 

一个字符串列表就是一个由一些被‘,'符号分开的子链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则   FIND_IN_SET() 函数被优化,使用比特计算。 如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,')时将无法正常运行。str也可以是变量,比如表中的一个字段。

当然,这不是我们项目中需要将FIND_IN_SET替换为IN的原因,因为在我们项目中两者都可以实现功能。只是IN比FIND_IN_SET性能高。我们要查询的字段是主键,使用IN时会使用索引,只会查询表中部分数据。FIND_IN_SET则会查询表中全部数据,由于数据量比较大,性能肯定不高,所以替换为IN。想看查询部分还是全部,可以使用EXPLAIN即解释功能查看,如果是部分则type为range(范围),全部则type为ALL(全部),还有个type是const,常量级的,呵呵。。。

最佳实践:

1、如果待查询的条件是常量那就使用IN,是变量则使用FIND_IN_SET,可以使用索引的,貌似,哈哈。

2、如果使用IN和FIND_IN_SET都能满足条件,则最好使用IN,理由同上,特别是查询字段为主键时或有索引时。

3、如果使用IN不能满足功能需求,那只能使用FIND_IN_SET了,哈哈,有时候说不定IN中条件加个%号也可以解决问题,加个%号IN就不只是比较是否相等了!

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

find_in_set 的相关文章

  • Python:测试空集交集而不创建新集

    我经常发现自己想要测试两个集合的交集而不使用交集的结果 set1 set 1 2 set2 set 2 3 if set1 set2 print Non empty intersection else print Empty interse
  • 创建“集合字典”

    我需要将数据有效地存储在类似于 集合字典 的东西中 例如有一个字典 其中包含与每个唯一键匹配的多个 唯一 值 我的数据源是一个 不是很好 结构化的 XML 我的想法是 我将浏览许多元素并找到关键 如果key不存在 则将其添加到字典中 如果已
  • Python 集合与列表

    在Python中 哪种数据结构更高效 更快 假设顺序对我来说并不重要 并且无论如何我都会检查重复项 那么 Python 集比 Python 列表慢吗 这取决于您打算用它做什么 在确定某个对象是否存在于集合中时 集合的速度要快得多 如x in
  • std::find 的优点

    使用 C 11 有什么优势吗std find超过一个容器的find method 如果是std vector 其中没有find方法 确实std find使用一些智能算法或简单地迭代每个元素的天真的方法 如果是std map看来你需要传递一个
  • 检测“位图中”的形状

    所以 在为下一场 ieextreme 比赛做准备时 我遇到了一些过去的问题 我发现一个真正困扰我的问题 因为我不知道该怎么做 我可能可以使用一些 300 行的暴力代码来实现它 但我我认为这不是在这样的比赛中应该做的事情 所以我需要你的帮助
  • 使用 VBA 选择“查找”的第二个结果

    我正在努力做到这一点 以便我可以找到 lights 的第二个结果 以防该术语出现各种情况 下面的代码查找所考虑范围内的第一个匹配项 Dim ws As Worksheet Dim rng1 As Range Dim y As Range C
  • 在 C++ 中将数组转换为集合

    有没有更简单的方法使用 C 将数组转换为集合而不是循环遍历其元素 最好使用标准模板库 对于所有标准库容器类型 请使用构造函数 http en cppreference com w cpp container set set std set
  • 如何在不更改 equals 和 hashcode 的情况下插入集合

    我正在寻找建议 我有一个Person具有字符串firstName和字符串lastName的类 当我试图插入具有相同字符串的列表值时 例如 set add new Person firstName lastName set add new P
  • 是否有可嵌入的 Java 替代 Redis?

    根据这个线程 https stackoverflow com questions 3047010 best redis library for java 如果我想从Java中使用Redis Jedis是最好的选择 然而 我想知道是否有任何库
  • 获取 3 个列表之间的差异

    我正在研究列表的差异 gt gt a 1 2 3 gt gt b 2 4 5 gt gt c 3 2 6 两组之间的对称差异可以使用以下方法完成 gt gt z set a symmetric difference set b gt gt
  • set()是如何实现的?

    我见过有人这么说setpython 中的对象具有 O 1 成员资格检查 他们如何在内部实施以实现这一点 它使用什么类型的数据结构 该实施还有哪些其他影响 这里的每个答案都非常有启发性 但我只能接受一个 所以我将选择最接近我原来问题的答案 谢
  • 如何在Linux中为特定程序设置进程ID

    我想知道是否有某种方法可以在运行某些应用程序之前强制使用 Linux 的某些特定进程 ID 我需要提前知道进程ID 实际上 有一种方法可以做到这一点 自内核 3 3 设置了 CONFIG CHECKPOINT RESTORE 在大多数发行版
  • 在 python 中对自定义类执行集合操作

    我想将 Python 的内置 set 类与我创建的自定义类一起使用 如果我愿意 要创建包含自定义类实例的集合 我需要实现哪些函数才能执行测试 例如 set a set b 它可以开箱即用 但是 在某些情况下 过载是有意义的 eq https
  • 如何在 Perl 脚本中递归查找文件/文件夹?

    我有一个 perl 脚本 我编写了该脚本来递归地搜索 Windows 文件夹中的文件 我输入搜索文本作为 perl 脚本运行时参数 以查找名称中包含此文本的文件 perl脚本如下 use Cwd file1 ARGV 0 res1 glob
  • 将 Set> 转换为 HashMap

    在我的代码中的某一时刻 我创建了一个Set
  • set() 可以在 Python 进程之间共享吗?

    我正在 Python 2 7 中使用多重处理来处理非常大的数据集 当每个进程运行时 它会将整数添加到共享的 mp Manager Queue 中 但前提是其他进程尚未添加相同的整数 由于您无法对队列进行 in 式成员资格测试 因此我这样做的
  • Python设置1和True的解释

    在 IPython 3 交互式 shell 中 In 53 set2 1 2 True hello In 54 len set2 Out 54 3 In 55 set2 Out 55 hello True 2 是因为 1 和 True 得到
  • 如何实现 __eq__ 进行集合包含测试?

    我遇到了一个问题 我将一个实例添加到一个集合中 然后进行测试以查看该对象是否存在于该集合中 我已经覆盖了 eq 但在包含测试期间不会调用它 我必须覆盖吗 hash 反而 如果是这样 我将如何实施 hash 鉴于我需要对元组 列表和字典进行哈
  • 设置迭代顺序因运行而异

    为什么 Python 集 具有相同内容 的迭代顺序在不同的运行中会有所不同 我可以选择哪些选项来使其在不同的运行中保持一致 据我所知 Python 集的迭代顺序是任意的 如果我将 a b 和 c 放入集合中然后迭代它们 它们可能会以任何顺序
  • 使用 find 命令搜索直到第一个匹配项

    我只需要搜索可以在任何地方的特定目录有没有办法运行此命令直到第一个匹配 谢谢 我现在使用 find noleaf name experiment type d wc l 正如鲁道夫 米尔鲍尔 Rudolf M hlbauer 所提到的 qu

随机推荐

  • self :: 和 this-> 的用法

    在访问PHP类中的成员变量或方法时 xff0c 如果被引用的变量或者方法被声明成const xff08 定义常量 xff09 或者static xff08 声明静态 xff09 那么就必须使用操作符 反之如果被引用的变量或者方法没有被声明成
  • 程序是怎样运行的

    一 CPU的内部结构解析 1 程序运行流程 程序员用C语言等高级语言编写程序 int a a 61 1 43 2 printf 34 d 34 a 将程序编译后转换成机器语言的EXE文件 01000101000010111 00110100
  • 人性的弱点 --卡耐基

    自序 成就此书的因缘 和人类所具备的潜能相比 xff0c 我们仍处于蒙昧之中 人类的身心只有极小部分得到了发挥 广义而言 xff0c 人类个体远未到达极限 人类囿于自身习惯 xff0c 从未将与生俱来的诸多能力发挥至极致 本书 xff0c
  • git-flow分支模型

    分支模型 xff1a 用 git flow 初始化工程目录完成后 xff0c 只能看到两个分支 xff08 长期分支 xff09 xff1a master 分支 xff1a 用于上线的分支 xff0c 保护性分支 xff0c 只包含经过测试
  • MySQL show关键字用法

    SHOW DATABASES 列出 MySQL Server 上的数据库 SHOW TABLES FROM db name 列出数据库中的表 SHOW TABLE STATUS FROM db name 列出数据库的表信息 xff0c 比较
  • windows10共享文件夹挂载到Ubuntu

    程序开发人员一般都会把开发目录放在windows系统下 xff0c 开发环境却是linux 以前我是linux下文件挂载到windows xff0c 有同事前车之鉴 xff0c 万一虚拟机linux挂壁了 xff0c 很难恢复 现在准备把w
  • 闭包函数中use使用

    匿名函数中的use xff0c 其作用就是从父作用域继承变量 下例是最常见的用法 xff0c 如果不使用use xff0c 函数中将找不到变量 msg 1 2 3 4 5 6 7 8 lt php msg 61 1 2 3 func
  • for update秒杀

    Mysql InnoDB 排他锁 用法 xff1a select for update 例如 xff1a select from goods where id 61 1 for update 排他锁的申请前提 xff1a 没有线程对该结果集
  • UNION 和 UNION ALL

    UNION用的比较多union all是直接连接 xff0c 取到得是所有值 xff0c 记录可能有重复 union 是取唯一值 xff0c 记录没有重复 UNION 和 UNION ALL 的语法都是 xff1a SQL 语句 1 UNI
  • php网站压测(ab)

    一般来说核心页面都需要进行压测 xff0c 特别是秒杀页面 xff0c 从而知道网站的承受能力 xff0c 方便暴露一些问题 xff0c 更好的把控网站 压测工具有很多种 xff0c 最简单 方便的可以使用ApacheBench xff0c
  • CSV文件读取 C++版本

    代码 span class token comment 创建结构体 xff0c 把读取数据可以放入结构体成员中 span span class token keyword struct span span class token class
  • 四种常见的 POST 提交数据方式

    HTTP 1 1 协议规定的 HTTP 请求方法有 OPTIONS GET HEAD POST PUT DELETE TRACE CONNECT 这几种 其中 POST 一般用来向服务端提交数据 xff0c 本文主要讨论 POST 提交数据
  • json_decode

    json 61 34 34 errorno 34 0 34 errormsg 34 34 可以 34 34 data 34 34 guid 34 34 5762340 34 34 username 34 34 wiu370468 34 34
  • csv乱码处理

    handle 61 fopen 34 war csv 34 34 r 34 row 61 1 while data 61 fgetcsv handle 1000 34 34 data 61 eval 39 return 39 iconv 3
  • OR和AND关键字一起使用的情况

    OR和AND关键字一起使用的情况 OR关键字和AND关键字 xff0c 可以一起使用 xff0c 需要注意 xff0c AND的优先级高于OR 因此 xff0c 当两者一起使用时 xff0c 应该先运算AND两边的条件表达式 xff0c 再
  • Ubuntu cron 定时执行任务

    cron xff0c 是一个Linux定时执行工具 xff0c 可以在无需人工干预的情况下运行作业 1 关于crontab 在Ubuntu server 下 xff0c cron是被默认安装并启动的 通过 etc crontab文件 xff
  • Linux服务器上监控网络带宽的18个常用命令

    本文介绍了一些可以用来监控网络使用情况的Linux命令行工具 这些工具可以监控通过网络接口传输的数据 xff0c 并测量目前哪些数据所传输的速度 入站流量和出站流量分开来显示 一些命令可以显示单个进程所使用的带宽 这样一来 xff0c 用户
  • Linux系统使用iftop查看带宽占用情况

    Linux系统下如果服务器带宽跑满了 xff0c 查看跟哪个ip通信占用带宽比较多 xff0c 可以通过iftop命令进行查询 xff0c 使用方法如下 xff1a 1 安装方法 软件官网地址 xff1a http www ex parro
  • linux基础命令

    1 curl amp wget 使用curl或wget命令 xff0c 不用离开终端就可以下载文件 如你用curl xff0c 键入curl O后面跟一个文件路径 wget则不需要任何选项 下载的文件在当前目录 代码如下 curl O we
  • find_in_set

    1 in查询相当于多个or条件的叠加 xff0c 例如 xff1a select from user where user id in 1 2 3 等效于 select from user where user id 61 1 or use