暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

最近遇到问题-2

天天李拜天DBA 2023-10-31
134

总结下这阵子遇到的问题

时间转换

在一次查询需求中,有张表一字段为有效期截止时间,但老表是用数字记录的,新表用时间格式记录的,需求是查出相同用户的有效期最新的那条记录 方法

  1. 在Excel 中处理
    1. 使用设置单元格格式
      自定义修改成'0000-00-00'的方式
    2. 使用数据-分列向导的第三步数据类型为日期
      进行分列 缺点:长度有限无法设置到秒,第一种只能小时,第二种是天
  2. 使用代码进行转换 我这里使用Golang
    a := "20231026225849"
 b := "20060102150405"
 c, _ := time.Parse(b, a)
 fmt.Println(c.Format("2006-01-02 15:04:05"))

  1. 使用MySQL自带函数
   SELECT STR_TO_DATE(20221010101010, '%Y%m%d%H%i%s') AS converted_date;

Golang 中将json转成struct

  1. Goland中有工具可实现自动转换
  2. 使用地址 https://mholt.github.io/json-to-go/   (个人测试需要将文本在linux上粘贴放到网站上才行,可能换行符的问题)
  3. vscode使用使用 Paste JSON as Code
    插件 其中1,2 转换的结果相似;个人喜欢第三个符合我的书写习惯

drop table

最近碰到在阿里云RDS中删除大表的问题

  1. 阿里云的RDS关于drop table
    都做了优化,在执行SQL后都是都不会产生IO上的波动,因为都是做了异步的删除;当然如果是热表还是会有刷缓存的问题。目前已知适用的版本是MySQL5.6 MySQL5.7,MySQL8.0
  2. MySQL在8.0 后做了类似的优化
  3. 腾讯云MySQL 有类似功能:异步删除大表
  4. 如果MySQL8.0 以前可以使用 该文章的方法:优雅的drop掉mysql库中1TB大表

抽样比较

之前写过一篇关于数据校验的文章,其中在抽样验证上增加了点内容

  1. 使用 select * from t order by rand() limit 100
    的方法来随机抽样。缺点就是 rand()
    需要全表扫描。所以对表大小有限制,我写的时候增加了个上限,超过上限则不能使用该方法
  2. 最近在学习 (万里开源的一个工具)gt-checksum 中的抽样比对。看看是否能写出个使用我们环境的简版抽样比对


文章转载自天天李拜天DBA,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论