MySQL手册中find_in_set函数的语法:
FIND_IN_SET(str,strlist)
str 要查询的字符串
strlist 字段名 参数以”,”分隔 如 (1,2,6,8)
查询字段(strlist)中包含(str)的结果,返回结果为null或记录
假如字符串str在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。 一个字符串列表就是一个由一些被 ‘,’ 符号分开的子链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则FIND_IN_SET() 函数被优化,使用比特计算。 如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。
FIND_IN_SET 和 IN 的区别
select * from tb_article where FIND_IN_SET(id, '1,2,3,4,5');
有点类似in (集合)
select * from treenodes where id in (1,2,3,4,5);
在MySQL中 where in条件如果是字符串,会自动转化成int类型,内部使用了 CAST('6,8,3,2' AS INT),导致’6,8,3,2‘ 变成了6,所以查询一中 tags_title只有一个。解决方法是使用查询二中的 FIND_IN_SET
FIND_IN_SET 和 IN 的性能对比
大数据量的情况下不适合用find_in_set, 不过有些表的数据可能永远就那么点数据,这个时候为了减少表数量,可以使用FIND_IN_SET 。
使用explain查看执行计划,Extra列看到Using temporary就意味着使用了临时表。
参考:
https://javascript.net.cn/article?id=765
修改时间 2021-04-11
声明:本站所有文章和图片,如无特殊说明,均为原创发布。商业转载请联系作者获得授权,非商业转载请注明出处。