目录
4、UNION 去重,效率一般;UNION ALL不去重,效率高
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");
2318

被折叠的 条评论
为什么被折叠?



