mybatis中如何写groupby
mybatis中如何写groupby concat函数?
concat函数?
该函数返回带有来自一个组的连接的非NULL值的字符串结果。该函数是一个增强的Sybase SQL Anywhere支持的基本LIST()函数。
语法结构:
GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val])
mysql一条sql怎么统计某个字段不同值的个数?
1. 先查验是否是自己想要的结果SELECT concat(LEFT(name, CHAR_LENGTH(name) -1), 4) FROM userinfo2. 更新update userinfo set name concat(LEFT(name, CHAR_LENGTH(name) -1), 4)
Mysql中哪些场景下会导致使用了索引但索引失效,导致性能变差?
程序员应该都知道,为了提高数据库的查询速度,我们可以对表上的一个字段或者多个字段建立索引,但是有些 SQL 错误的写法,可能会导致索引失效。
01. 查看执行计划
如何判断 SQL 的执行是做了全表扫描还是走了索引,不是凭感觉判断 SQL 执行的快慢,而是要看 SQL 的执行计划;很多工具都提供了查看执行计划的功能,不过最原始的方法,还是通过 explain 进行查看;下面的 SQL,是否使用的索引,一目了然。
1. 没有索引
explain select * from user where gender M
2. 有索引
explain select * from user where name Tom
02. 索引失效
1. 使用 like 时,% 在前面不走索引(在后面可以走索引);
explain select * from user where name like %om
2. 数据类型出现隐式转化,比如我们这里手机号 mobile 字段设置的是 varchar 类型,但是查询的时候用的是数字,那么就【可能】不走索引。
explain select * from user where mobile 13800000000
3. 在索引字段上使用 not,ltgt,! ;
explain select * from user where mobile ltgt 13800000000
explain select * from user where mobile ! 13800000000
4. 对索引字段上使用函数;
explain select * from user where length(mobile) lt 10
5. 联合索引,如果查询条件不满足最左匹配原则,则不会走索引;
6. or 会使索引失效,尽管 or 左右的条件都有索引;
explain select * from user where name Tom or mobile 13800000000
总之,MySQL 的索引优化和索引失效还是挺复杂的,主要体现在 MySQL 随着版本升级,有一些我们熟知的技巧可能会不再正确,我们现在认为一定会索引失效的 SQL 写法,可能会变成走索引,所以这也是为什么我在上文中,多次用到【可能】会造成索引失效的原因。
我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。