资讯专栏INFORMATION COLUMN

mysql查找以逗号分隔的值-find_in_set

Brenner / 3364人阅读

摘要:需求有一个表字段很多逗号的值,然后查询时候传入一些值,匹配所有数据内包含查询传入的这些值的数据可能你一开始会想到或者,那么结果可能也会包含的数据,不太准一开始我用的正则匹配的,今天无意中发现了另外一个函数,废话不多说了相信很多人也这么存过,

需求:有一个表字段很多逗号的值,然后查询时候传入一些值,匹配所有数据内包含查询传入的这些值的数据

可能你一开始会想到 SELECT * FROM xujiantao WHERE game LIKE ‘%44′ 或者 ’44%’ ‘%44%’, 那么结果可能也会包含444的数据,不太准

一开始我用的正则匹配的,今天无意中发现了另外一个MYSQL函数,废话不多说了

相信很多人也这么存过,假如有以下表数据:

然后试下LIKE:

它把包含44和包含444的结果都输出了,而我只想得到44

当然你可以使用正则这么玩:

SELECT * FROM xujiantao WHERE game REGEXP ‘[d]?,44,’;

比较简洁一点的,也就是最后要说的用法是FIND_IN_SET函数:

SELECT * FROM xujiantao WHERE FIND_IN_SET(44, game);

同样没有把444和888的数据输出,最终得到了想要的数据

需要注意的是假如你用的是0X, 00X, 000X这样的数据查找需要加引号,否则找不到

OK,我加了一百多万的随机数据,简单对比一下以上几种查询方式的效率

使用LIKE查询包含22、273、2399、7390的结果,主要看下耗时

1.29秒

使用正则查询包含22、273、2399、7390的结果

使用FIND_IN_SET查询包含22、273、2399、7390的结果

以上截图都是用的InnoDB引擎,game字段加了索引

后来改成MyIsam引擎又测试了下多个不同条件查询,慢了差不多8%的速度

最后要说的就是FIND_IN_SET函数比LIKE和正则匹配快一些

正则写起来费劲,还要保证正确性,就算得到精确结果应该也不会太快

FIND_IN_SET比较快一些,OR 4个条件 的结果 LIMIT 20 也才 0.1秒,加个倒序0.4秒

MyIsam引擎:

InnoDB引擎:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/46497.html

相关文章

  • MySQL字段中使用逗号分隔

    摘要:大多数开发者应该都遇到过在字段中存储逗号分割字符串的经历,无论这些被分割的字段代表的是还是,这个字段都应该具有如下几个共性。 大多数开发者应该都遇到过在mysql字段中存储逗号分割字符串的经历,无论这些被分割的字段代表的是id还是tag,这个字段都应该具有如下几个共性。 被分割的字段一定是有限而且数量较少的,我们不可能在一个字符串中存储无限多个字符 这个字段所属的表与这个字段关联的表...

    dabai 评论0 收藏0
  • MySQL字段中使用逗号分隔

    摘要:大多数开发者应该都遇到过在字段中存储逗号分割字符串的经历,无论这些被分割的字段代表的是还是,这个字段都应该具有如下几个共性。 大多数开发者应该都遇到过在mysql字段中存储逗号分割字符串的经历,无论这些被分割的字段代表的是id还是tag,这个字段都应该具有如下几个共性。 被分割的字段一定是有限而且数量较少的,我们不可能在一个字符串中存储无限多个字符 这个字段所属的表与这个字段关联的表...

    kyanag 评论0 收藏0
  • MySQL 常见使用情景

    摘要:当某字段需要存储字符串类型的数组时,如何查询例如有个字段存储的数据类型是字符串类型,存储的值必须使用逗号分隔,如,,现在如果需要查找出中含有的记录时,请使用函数,仅才有,一种精确匹配,只能使用逗号分隔整型时间戳的转换与比较如果使用整型类型保 当某字段需要存储字符串类型的数组时,如何查询 例如:有个type字段,存储的数据类型是varchar字符串类型, 存储的值必须使用逗号分隔,如2...

    xioqua 评论0 收藏0
  • MySQL主表存储逗号分隔id时的增删改查操作

    摘要:案例查询系统用户关联的产品关联的应用难点表通过一个字段维护所有关联的产品的集合。 案例1:查询系统用户(993318396439445506)关联的产品关联的应用 [sys_user] [sys_user_prod] [product] [app] uid-------------user_id /---id----------produ...

    MadPecker 评论0 收藏0
  • mysql 存储过程

    摘要:上次使用还是年浸会上学的时候,为了写这个,真是花了好长时间。最近又重新研究了下。感叹时间飞逝啊。自从渣叔走了以后,就很少关注多特蒙德了。纪念一下伪球迷的青春参考学习存储过程学习 直接点,代码为主: 1.创建表 CREATE TABLE `t_tree` ( `id` int(11) NOT NULL AUTO_INCREMENT, `park_id` int(11) NOT N...

    ingood 评论0 收藏0

发表评论

0条评论

Brenner

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<