• Mysql find_in_set 效率问题


    FIND_IN_SET(str,strList)

    • str 要查询的字符串
    • strList 字段名,参数以“,”分隔,如(1,2,6,8)
    • 查询字段(strList)中包含的结果,返回结果null或记录。

    strList 字符串列表就是一个由一些被 ‘,’ 符号分开的子链组成的字符串.如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。

    一、基础用法

    select find_in_set('1','1,2,3,4,5,6');
    select find_in_set('2','1,2,3,4,5,6');
    select find_in_set('7','1,2,3,4,5,6');
    select find_in_set('2','1,21,3,4,5,6');
    select find_in_set('1','');
    null
    select find_in_set(null,'1,2,3,4,5,6');
    null
    select find_in_set('1',null);

    二、find_in_set() 和 in 的区别
    例子:
    INSERT INTO `tb_test` VALUES (1, 'name', 'daodao,xiaohu,xiaoqin');
    1.SELECT * from tb_test where "daodao" in (list);
    这样是查不出数据的,这样只有当list字段的值等于'daodao'时(和IN前面的字符串完全匹配),查询才有效,否则都得不到结果,即使'daodao'真的在list中。
    2.
    SELECT * from tb_test WHERE 'daodao' IN ('libk', 'zyfon', 'daodao')
    解析:原因其实是(一)中 (list) list是变量, 而(二)中 ('libk', 'zyfon', 'daodao')是常量。
    3.
    SELECT * from tb_test where FIND_IN_SET("daodao",list)
    解析:find_in_set 函数 这里的“list” 是 变量

    三、
    find_in_set() 和 like 的区别
    like是广泛的模糊匹配,字符串中没有分隔符,Find_IN_SET 是精确匹配,字段值以英文”,”分隔,Find_IN_SET查询的结果要小于like查询的结果。

    项目中根据地区标识查询用到了find_in_set,但考虑到效率问题,最后还是做了调整用in来处理。

    by:jiaofeifei


  • 相关阅读:
    vb 动态添加 timer
    sruts2 国际化 规范
    vb 创建xml
    robots
    android 桌面斗地主
    QT 平台
    云软件 Eucalyptus云
    android intentfilter
    android 布局相关
    Zend Studio PHP
  • 原文地址:https://www.cnblogs.com/widgetbox/p/12394254.html
Copyright © 2020-2023  润新知