数据库如何优化是一个老生常谈的问题。
数据库的选择?数据库之间的区别?
比较常用的就是mysql,免费开源, pgsql 免费 ,Oracle 收费 银行用的多,存储支持的多,高斯DB 国产数据库,kingbase 登登。区别很多,大部分都是项目上通用哪个选哪个。
sql的优化?
1.避免select * ,一是索引会失效,二是会有回表
2,。union 比 union更耗时
3.小表驱动大表,关联查询的话,先查数据集小的,再去关联数据大的
4.批量处理数据。
5.分批查数据,至少要做分页。limit
6.join不应该太多
7.加索引,避免索引失效。在大量查询的时候,应该少索引。
8.最好规定合适的类型,指定类型的大小
索引失效条件?索引是什么数据类型?
explain + sql 可以查询索引的执行计划。
索引用的是B+树,数的高度代表了查询的io次数。B+树的非叶子结点只存储索引,叶子结点存储数据,叶子结点还是双向链表,特别适合范围查找等等。一个page叶16KB,大概存储了1170个数据,1170117032=4KW的数据,够用了。
1.不满足最左前缀
2.使用select*
3.索引列上有计算,或者使用了函数,查询字段使用了is null
4.like左边有%
5.使用or
Mybatis的一二级缓存
Mybatis的缓存机制有两个一个是sqlSession级别的,这个是每次查询都会用的到的,这个是一级缓存,二级缓存是Mapper级别的缓存。
Mybatis_plus如何更新空值,如何设置默认值?
在使用 MyBatis-Plus 进行数据库操作时,可以通过 UpdateWrapper 来更新空值。
更新空值的示例代码如下所示:
// 创建 UpdateWrapper 对象
UpdateWrapper updateWrapper = new UpdateWrapper<>();
updateWrapper.set(“column”, null); // 将指定字段的值设为null
// 调用 update() 方法进行更新操作
int rowsAffected = entityMapper.update(entity, updateWrapper);
System.out.println(“影响的记录条数:” + rowsAffected);
@Data
public class User {
@TableId(type = IdType.AUTO) // 自动生成主键ID
private Long id;
@TableField("username") // 指定表中的列名
private String username;
@TableField(value = "age", insertStrategy = FieldStrategy.DEFAULT, updateStrategy = FieldStrategy.IGNORED) // 设置默认值并且不更新该字段
private Integer age;
}