随手记2025-10-27

目录

1、mysql,表重命名

2、mysql,创建相同结构表

3、tab_log按月备份后,创建新表

4、UNION 去重,效率一般;UNION ALL不去重,效率高

5、索引

6、分页优化

7、Lambda表达式、Stream流

8、Optional解决空指针


1、mysql,表重命名

RENAME TABLE tab_administration_area TO tab_administration_area20251027;

2、mysql,创建相同结构表

CREATE TABLE tab_administration_area LIKE tab_administration_area20251027;

3、tab_log按月备份后,创建新表

java代码中创建定时器,每月1号执行一次

sevice中,使用SqlSession,进行DDL操作

private SqlSession sqlSession;
//  重命名原表为备份表
String renameSql = "RENAME TABLE " + currentTableName + " TO " + backupTableName;
sqlSession.update(renameSql); // 使用SqlSession执行DDL
log.info("成功将表 {} 重命名为 {}", currentTableName, backupTableName);

//  创建新的空表 tab_log (使用备份表的结构)
String createSql = "CREATE TABLE " + currentTableName + " LIKE " + backupTableName;
sqlSession.update(createSql);
log.info("已创建新的空表 {}", currentTableName);

4、UNION 去重,效率一般;UNION ALL不去重,效率高

5、索引

  • 单表索引数量控制在3-5个以内
  • 优先为高频查询和WHERE条件建立索引
  • 合理使用符合索引

6、分页优化

-- 越往后越慢!
SELECT * FROM tab_log ORDER BY id LIMIT 100000, 20;

优化方案

-- 使用游标分页
SELECT * FROM tab_log WHERE id > 100000 ORDER BY id LIMIT 20;
 
-- 或者记录上次查询的最大ID
SELECT * FROM tab_log WHERE id > last_max_id ORDER BY id LIMIT 20;

7、Lambda表达式、Stream流

// Java 8之前
new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello from a thread");
    }
}).start();
 
// Java 8之后
new Thread(() -> System.out.println("Hello from a thread")).start();
// 传统写法:循环遍历
List<String> names = new ArrayList<>();
for (User user : users) {
    if (user.getAge() > 18) {
        names.add(user.getName());
    }
}
 
// Lambda写法:声明式编程
List<String> names = users.stream()
    .filter(user -> user.getAge() > 18)
    .map(User::getName)
    .collect(Collectors.toList());

8、Optional解决空指针

// 传统写法:层层判空
if (user != null) {
    Address address = user.getAddress();
    if (address != null) {
        String city = address.getCity();
        if (city != null) {
            return city.toUpperCase();
        }
    }
}
return "UNKNOWN";
 
// Optional写法:链式调用
return Optional.ofNullable(user)
    .map(User::getAddress)
    .map(Address::getCity)
    .map(String::toUpperCase)
    .orElse("UNKNOWN");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值