数据库设计及优化

  • 业务相关数据分类

1 日志类
举例,登录日志,物品日志
特征,数据量大,增量大,按时间稳定增长,不会修改
处理方式,1每日统计自增主键代替日期查询2按月分表切割数据
2 统计类
举例,留存,LTV(生命周期总价值)
特征,每日数据产生固定, 不会修改
处理方式,1定时器统计2低谷时期执行3可选时间范围执行
3 配置类
举例,权限
特征,频繁使用,数据量小,改动次数少,要求数据精确
处理方式,1缓存2数据修改日志
4数据库并发和批量处理
举例,统计数据插入
特征,短时间内的高并发,数据库CPU负载过高
处理方式,1缓存2批量处理3队列

  • 技术相关

1 SELECT *
数据量大,并发量大的查询列举字段,特指统计类数据
数据量少,变动性大的查询可以用*,特指未上线接口,配置类数据
2 DATE_FORMAT
Where条件语句不用函数,会使索引失效,降低查询效率
错误写法date_format(createTime,’%Y-%m-%d’)>=’2019-02-16’,UNIX_TIMESTAMP(time)>
3 IN ()
aid In(a,b)等同于aid=a or aid=b 每一个值会遍历整个表,要控制in的数据量。
Mysql 50W个值可行 100W个值不可行。
数据量过大(百万)可以从业务上优化,例如 aid=a limit 1 分多次查询会比in的效率高。
4 GROUP_CONCAT
有数据上限默认是1024个字节。
5 存储过程
存储过程要比sql语句执行更快的说法,实际上是个误解。
存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度,处理高并发。
建立在数据库中,需要使用脚本来保证移植和兼容问题,维护代价高。
6 临时表
当某一个SQL语句关联的表在2张及以上,并且和一些小表关联。可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中。
程序执行过程中可能需要存放一些临时的数据,这些数据在整个程序的会话过程中都需要用的等等。
配置类数据在SQL中的关联次数。
7 常用关键字和函数
字符函数
SELECT CONCAT(‘IMOOC’,’-‘,’MySQL’);//IMOOC-MySQL
SELECT SUBSTRING(‘mYSQL’,1,2); //从字符串中的第一个位置开始截取2个字符mY
关键字 CASE…WHEN…ELSE EXISTS IFNULL数字接收 CAST CONVERT数据类型转换
ifnull(sum(case when a.duration between 0 and 300 then 1 else 0 end),0) as A," // 0-5min
“ifnull(sum(case when a.duration between 301 and 600 then 1 else 0 end),0) as B,” // 5-10min
"ifnull(sum(case when a.duration between 601 and 1800 then 1 else 0 end),0) as C
数值运算符函数 % / MOD
日期时间函数 NOW
聚合函数 AVG COUNT MAX
加密函数 MD5
性能优化,统一排查
1业务优化
减少SQL执行数量
减少SQL抓取的冗余数据
并发问题(数据批量插入,总查询)
2性能优化
优化SQL执行时间(慢查询)
1.逻辑设计,代码健壮性 (减少交互次数,分页功能 时不要偷懒,下标异常,设置默认时间)
2.语句优化 (select *,全表,连接查询)
2.缓存操作 (实时性要求不高)
3.数据库,表的设计 (3NF,读写分离,分表)
4.存储过程 (模块化代码,批量)
5.索引
6.定期清理
7. EXPLAIN SELECT * FROM gms_account

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值