Java程序猿搬砖笔记(十八)
MySQL索引命名规范、索引使用规范
索引命名规范:
- 索引名必须全部使用小写。
- 非唯一索引按照“idx_字段名称[_字段名称]”进用行命名。例如idx_age_name。
- 唯一索引按照“uniq_字段名称[_字段名称]”进用行命名。例如uniq_age_name。
- 组合索引建议包含所有字段名,过长的字段名可以采用缩写形式。例如idx_age_name_add。
索引使用规范:
- 单张表中索引数量不超过5个。
- 单个索引中的字段数不超过5个。
- 表必须有主键,推荐使用UNSIGNED自增列作为主键。
- 唯一键由3个以下字段组成,并且字段都是(整)(形)(时),可使用唯一键作为主键。其他情况下,建议使用自增列或发号器作主键。
- 联表查询时,JOIN列的数据类型必须相同,关联字段要建立索引。
- 不在低基数列上建立索引,例如“性别”。
- 选择区分度大的列建立索引。组合索引中,区分度大的字段放在最前。
- 对字符串使用前缀索引,前缀索引长度不超过8个字符。
- 不对过长的VARCHAR字段建立索引。建议优先考虑前缀索引,或添加CRC32或MD5伪列并建立索引。
- 合理创建联合索引,(a,b,c) 相当于 (a) 、(a,b) 、(a,b,c)。
- 合理使用覆盖索引减少磁盘IO,避免文件系统排序。
- 禁止冗余索引。
- 禁止重复索引。
- 禁止使用外键。
SpringBoot使用@Lazy解决循环依赖问题
@Lazy注解可以用于延迟初始化Bean,从而避免循环依赖。当一个Bean被标记为@Lazy时,它将在第一次使用时才被初始化。
示例代码如下:
1 |
|
SpringBoot循环依赖的6种解决方案
Nginx超时时间设置
1、send_timeout?
发送数据至客户端超时, 默认60s, 如果连续的60s内客户端没有收到1个字节, 连接关闭
2、proxy_connect_timeout
Nginx与upstream server的连接超时时间
3、proxy_read_timeout
Nginx接收upstream server数据超时, 默认60s, 如果连续的60s内没有收到1个字节, 连接关闭
4、proxy_send_timeout
Nginx发送数据至upstream server超时, 默认60s, 如果连续的60s内没有发送1个字节, 连接关闭
这几个配置放在location、server、http都可以,Nginx会取最小值。
windows环境超时时间配置无效,原因未知
Linux统计当前文件夹下的文件个数、目录个数
1 | // 统计当前文件夹下文件的个数,不包括子文件夹里的 |
说明:
ls -l :
长列表输出当前文件夹下文件信息(注意这里的文件,不同于一般的文件,可能是目录、链接、设备文件等);
grep “^-” :
这里将长列表输出信息过滤一部分,只保留一般文件,如果只保留目录就是 ^d
wc -l :
统计输出信息的行数,因为已经过滤得只剩一般文件了,所以统计结果就是一般文件信息的行数,又由于一行信息对应一个文件,所以也就是文件的个数。
Linux查看内存使用情况命令
1、free -h
2、cat /proc/meminfo
3、top
Git更换远程仓库地址
TPS、QPS、RT、吞吐量、最佳线程数量的理解
性能指标:QPS、TPS、系统吞吐量理解、两分钟读懂什么是TPS和QPS
MySQL多表联合更新
示例:
1 | update jx_org_sequence_grade g, sys_org_tbl o |
Spring和mybatis中@Param注解的区别
Spring jedis集群配置
配置文件:
1 | # reids配置 |
配置类:
1 | /** |
MySQL存储过程学习
游标
- 局部变量定义要在游标之前
1 | declare uname varchar(100); |
- 把游标中获取到的值赋值给变量
1 | fetch u_cursor into uname,upro; |
条件处理程序
语法:
示例:
1 | -- 声明条件处理程序 : 当SQL语句执行抛出的状态码为02000时,将关闭游标u_cursor,并退出 |
MySQL存储函数和存储过程的区别
- 存储函数的输入参数只能是in
- 存储函数必须有返回值,所以使用很少
- 存储函数能做的,存储过程都可以做
参考:黑马程序的MySQL-进阶篇.pdf
MySQL查询数据库表的所有字段并用逗号分隔
1 | -- 按ordinal_position 字段排序 |
group_concat函数语法:
group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator ‘分隔符’] )
默认就是’,'号分割。
Mybatis查询数据为null时,返回情况总结
- 返回类型为集合类型,返回一个空集合(大小为0,非null),避免空指针异常
- 返回类型为基本类型(int、long),会抛空指针异常。
- -返回类型为基本类型的包装类型(Integer、Long),返回null