有一张表Table有IDStr字段,如下只显示二个字段还有很多其他字段

方式一 字段逗号分割,直接用UserIDStr字段,里面存多个ID用逗号分割

UUID  UserIDStr

1111  1,2,3

2222  3

方式二用关联表,关联表如下:

UUID  UserID

1111   1

1111   2

1111   3

222   3

测试了50W条数量

-- 方式一设计用 Like查几次时间分别是: 1.192s 1.140s 1.171s 1.425s
select * from af_archive where concat(',',EditUserIDArr,',') like CONCAT('%,','6',',%') and CreateUserID=10 order by CreateTime desc limit 11,20;

-- 方式一设计用 FIND_IN_SET查了几次时间分别是: 1.441s 1.336s 1.214s 1.116s
select * from af_archive where FIND_IN_SET('6',EditUserIDArr) and CreateUserID=10 order by CreateTime desc limit 11,20;

--方式二设计用 left join on 查了几次时间分别是 1.134s 1.037s 1.068s 1.120s 1.112s 1.472 1.422 1.160s 1.047
select a.* from af_archive a left join archiveedituser b on a.ArchiveUUID=b.ArchiveUUID and b.EditUserID=6 where a.CreateUserID=10 order by a.CreateTime desc limit 11,20;

分析结果

方式一(字段逗号分割)的LIKE与FIND_IN_SET时间差不多,不分上下

方式二(关联表)的用LEFT JOIN ON 时间比上面这种方式要快一些。

另外方式二有二种 不推荐的写法查询时间较久,如下

--方式二先 left join on再 where条件 用时 5.641s 5.488s 7.679s 6.230
select a.* from af_archive a left join archiveedituser b on a.ArchiveUUID=b.ArchiveUUID where b.EditUserID=6 and a.CreateUserID=10 order by a.CreateTime desc limit 11,20;

-- 方式二用where in 用时: 6.397s 5.842s 5.621s
select a.* from af_archive a where 6 in (select b.EditUserID from archiveedituser b where a.ArchiveUUID=b.ArchiveUUID) and a.CreateUserID=10 order by a.CreateTime desc limit 11,20;

=================================

后面把数据添加到150W条数据测试结果如下

-- Like 7.256s 6.072s 8.108s 6.013s 6.060s
-- select * from jsj_af.af_archive where concat(',',EditUserIDArr,',') like CONCAT('%,','6',',%') and CreateUserID=10 order by CreateTime desc limit 11,20;

-- FIND_IN_SET 5.624s 5.574s 5.608s 7.465s 5.931s
-- select * from jsj_af.af_archive where FIND_IN_SET('6',EditUserIDArr) and CreateUserID=10 order by CreateTime desc limit 11,20;

-- left join on 5.872s 7.254s 7.317s 5.671s 6.305s
-- select a.* from jsj_af.af_archive a left join jsj_af.archiveedituser b on a.ArchiveUUID=b.ArchiveUUID and b.EditUserID=6 where a.CreateUserID=10 order by a.CreateTime desc limit 11,20;

mysql 中LIKE 与FIND_IN_SET 与关联表left join 速度效率比较的更多相关文章

  1. MySQL 中的数据库名称、数据表名称、字段名称

    如何查询Oracle,Sql Server,MySQL 中的数据库名称.数据表名称.字段名称 分类: Database2012-09-24 22:16 7034人阅读 评论(0) 收藏 举报 数据库s ...

  2. 【数据库】Mysql中主键的几种表设计组合的实际应用效果

    写在前面 前前后后忙忙碌碌,度过了新工作的三个月.博客许久未新,似乎对忙碌没有一点点防备.总结下来三个月不断的磨砺自己,努力从独乐乐转变到众乐乐,体会到不一样的是,连办公室的新玩意都能引起莫名的兴趣了 ...

  3. 在 MySQL 中查找含有目标字段的表

    要查询数据库中哪些表含有目标字段,可以使用语句: SELECT TABLE_SCHEMA,TABLE_NAME FROM information_schema.`COLUMNS` WHERE COLU ...

  4. 超实用--删除MYSQL中指定的数据的全部表

    作过的人都知道,重复测试数据库的苦恼. 用法:# Usage: ./script user password dbnane mysql.nixcraft.in ~~~~~~~~~~~~~ #!/bin ...

  5. 查询MySQL中某个数据库中有多少张表

    SELECT COUNT(*) TABLES, table_schema FROM information_schema.TABLES   WHERE table_schema = '数据库' GRO ...

  6. mysql中,创建包含json数据类型的表?创建json表时候的注意事项?查询json字段中某个key的值?

    需求描述: 在mysql数据库中,创建包含json数据类型的表.记录下,在创建的过程中,需要注意的问题. 操作过程: 1.通过以下的语句,创建包含json数据类型的表 mysql> create ...

  7. 一、TCL事务控制语言 二、MySQL中的约束 三、多表查询(重点) 四、用户的创建和授权 五、MySQL中的索引

    一.TCL事务控制语言###<1>事务的概念 事务是访问并可能更新数据库中各种数据项的执行单元. 事务是一条SQL语句,一组SQL语句,或者整个程序. 事务是恢复和并发控制的基本单位. 事 ...

  8. 详述 MySQL 中的行级锁、表级锁和页级锁

    转自:https://blog.csdn.net/qq_35246620/article/details/69943011 refer:cnblogs.com/f-ck-need-u/p/899547 ...

  9. mysql中使用show table status 查看表信息

    本文导读:在使用mysql数据库时,经常需要对mysql进行维护,查询每个库.每个表的具体使用情况,Mysql数据库可以通过执行SHOW TABLE STATUS命令来获取每个数据表的信息. 一.使用 ...

随机推荐

  1. input清空和重置select下拉框

    背景 一般页面搜索条件都会有input输入框和select选择框,同时页面上都会有重置reset按钮,这时就需要清空input和重置select 实现 清空input 清空单个input: $(&qu ...

  2. LOJ #2831. 「JOISC 2018 Day 1」道路建设 线段树+Link-cut-tree

    用 LCT 维护颜色相同连通块,然后在线段树上查一下逆序对个数就可以了. code: #include <cstdio> #include <algorithm> #inclu ...

  3. linux 多并发 连接限制修改

    1. 修改 ulimit -a 查看 open files 表示单个用户能打开的最大句柄  如果开发的高并发当个进程打开的句柄需要很大. 修改/etc/security/limits.conf 里面有 ...

  4. SpringBoot学习- 11、更好用的代码生成工具EasyCode

    SpringBoot学习足迹 之前的mybatis代码生成工具无法自定义模板,找了一个可以自定义模板的插件,初学者最好用比较齐全的代码生成工具,不然拼错一个代码会掉坑里半天爬不出来. 有的同学会说干么 ...

  5. 使用nginx代理gogs遇到推送代码错误的问题(RPC failed; HTTP 413 curl 22 The requested URL returned error: 413)

    前提 代码管理我是用Gogs.Git,前些阵子使用Nginx将git.balabiu.com反向代理到了Gogs的默认端口,其他二级域名准备做其他使用, 导致上报代码出现了错误. 问题 推送代码报错误 ...

  6. GSS 系列题解

    GSS GSS1 随便猫树或者线段树,就可以过了 猫树不说,线段树可以维护左边最大,右边最大,区间最大,区间值然后就做出来了. //Isaunoya #pragma GCC optimize(2) # ...

  7. [PAT] A1018 Public Bike Management

    [思路] 题目生词 figure n. 数字 v. 认为,认定:计算:是……重要部分 The stations are represented by vertices and the roads co ...

  8. 常用的一些git命令整合

    一.创建一个版本库 1.mkdir xxx 2.git init 使用git init命令将这个目录变成Git可以管理的仓库 这个版本仓库创建好了,xxx目录下有一个隐藏的.git目录(里面有暂存区( ...

  9. Pikachu-File Inclusion(文件包含漏洞)

    File Inclusion(文件包含漏洞)概述 文件包含,是一个功能.在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件. 比如 在PHP中 ...

  10. python的循环语句

    python的循环语句有两种:for 和 while,for循环是对可迭代对象进行迭代并处理,因此for的对象是一个可以迭代的对象,而while循环的条件则是一个布尔值可以是一个返回布尔值的表达式. ...