select - query
一、between in
(都支持数字、字符串、时间日期类型)
between具备比较功能, 支持 not between and
expr BETWEEN min AND max
当 expr 表达式的值大于或等于 min 且小于或等于 max 时, BETWEEN 的返回值为 1 ,否则返回 0
BETWEEN 与 <、<=、>=、> 等运算符在某些情况下有着类似的功能,但 BETWEEN 运算级别更高且效率上更甚一筹。当然由于 BETWEEN 存在边界值的问题而不够灵活
in 支持not in
in的列表项值不明确是,可以通过一个子查询:
SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=0)
一般情况下,对索引字段操作,使用or 效率高于in,但对于列表项不确定时,就必须使用in运算符
在任何查询中, int 时间戳效率都是最优的
参考:https://www.cnblogs.com/tianzeng/p/9279593.html
二、find_in_set/in/like(find_in_set性能低于in)
查询字段中逗号分隔的内容里包含该变量: select * from table where find_in_set('a', field); //与in的区别是, field是常量,可以用in, 否则只能用 find_in_set; ---select * from table where 'a' in (field);
like 是模糊匹配, 主要问题是无法做到精确匹配(find_in_set/in是精确匹配)
SELECT userid,username,userrole 角色 FROM `user` WHERE userrole LIKE '%2%';
SELECT userid,username,userrole 角色 FROM `user` WHERE find_in_set('2',userrole); //后者要比前者的量级小点, 针对25,102 无法做到精确匹配
参考:
https://www.jb51.net/article/143105.htm
https://www.cnblogs.com/widgetbox/p/12394254.html