专栏首页飞哥专栏mysql 以空间换时间专研
原创

mysql 以空间换时间专研

提升mysql数据库执行效率是个永远的难题,在数据量增长到一定量后,都会有各种解决方案,比如分库分表,加大服务器内存、cpu。而这里我要探讨在没有大的改动下,对大部分中小平台适用,如何快速提高数据库执行效率。

mysql 以空间换时间专研:https://www.ffeeii.com/543.html

一、增加空间换时间

数据表
CREATE TABLE `sms` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `user_id` bigint(20) NOT NULL COMMENT '用户id',
  `tel` char(11) NOT NULL COMMENT '用户手机号',
  `content` text NOT NULL COMMENT '短信详情',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NOT NULL COMMENT '更新时间',
  `send_status` tinyint(1) unsigned DEFAULT '1' COMMENT '发送状态1,未发送2,发送中3,已发送4,失败',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='短信发送队列'

1、增加多余字段

这种数据库反范式的设计,用空间来换取时间,把数据冗余在多个表中,当查询时可以减少或者是避免表之间的关联。以发送短信的表为例,用户手机号是和用户user_id关联的,用户表是自带tel字段,这里在sms表增加tel字段,减少联表查询。增加字段常用的场景有:用户账号,用户昵称,订单中的商品名称,商品规格、价格等。其实增加字段可以有效的保护数据安全和校验。比如支付表的金额和订单的金额,数据都需要双存储,支付表的金额和订单中的金额一致。

2、使用索引

索引是最典型的以空间换效率的手段,还是以sms表为例,tel和user_id可以添加索引。索引的话题比较大,这里不做说明。

3、增加表

需要查询的字段单独放入另外一张表,比如搜索条件。常见的搜索商品业务,商品的发货地(此数据一般关联商家地址)、重量、规格、是否无条件退款(关联商家)等,这些搜索条件单独存一张表。还有常见的统计业务,不应实时查询,增加一张表,定时查询统计后插入到新表中。

4、视图

数据表视图也是常用的办法,不过我们实践过程中发现并不是特别好,维护数据表比较麻烦。不推荐,特殊情况也可以用。

5、缓存空间

程序缓存,比如文件缓存,还有各种nosql,memcahce、redis这样的Key-Value数据库,本质上也是空间换时间,或者说换个好点的空间。

二、减少空间换时间

1、删除数据

发短信这个业务,可以理解为,发送完短信,这条记录就不需要了,所以就可以把数据删除掉,

有限减少这张表的数据总量。类似这样的业务:推送消息、操作日志(不重要的日志)

2、备份数据

删除数据是不靠谱的手段,数据库里面的数据都是有用的。有一条规则,加字段标记为删除,也不要物理删除数据,这是很多开发人员常见的错误,比如产品经理要求开发个删除功能,开发就把数据删除了。准确的做法是每隔一段时间,就把sms表里面的数据全部备份到另外一张表,备份好后,再把sms的数据删除掉,两条sql语句可以搞定。

下次备份的时候更换id取值范围。

当然,操作前先备份,以备误操作。

常见的业务:用户的浏览行为、错误日志、发送的邮件等。

总结

抛出来了一些业务场景,结合自己的业务有效的提升MySQL性能,上面的规则也不是永远有效,还要考虑到运维部署,开发改动等,在实践中再改进。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 2020年最新整理20个必备PHP开源类库,武装生产力

    2020年上半年已完结,PHP依旧是Z好的语言,推荐20个必备的PHP开源类库,只推荐综合排名第一的类库,其他第二第三的就不考虑了,有些类库已经年久失修,推荐就...

    yunfeiyun
  • PMP-规避、转移、减轻、接受、上报,风险应对策略全解析

    1、客户要求项目经理在一星期内让系统上线。系统仍然有些小缺陷,但是项目经理希望满足客户的愿望,让系统按时上线。项目经理应该选择以下哪个风险策略?

    yunfeiyun
  • 质量成本:一致性成本和非一致性成本对比

    质量成本(cost of quality)包括在产品生命周期中为预防不符合要求,为评估产品或服务是否符合要求,以及因未达到要求(返工),而发生的所有成本。

    yunfeiyun
  • 商城项目-SPU和SKU数据结构

    需要注意的是这两个字段:specifications和spec_template。

    cwl_java
  • 电商系统设计之商品 (上)

    电商大伙每天都在用,类似某猫,某狗等。电商系统设计看似复杂又很简单,看似简单又很复杂。本章适合初级工程师及中级工程师细看,大佬请随意。

    程序员宝库
  • 电商系统设计之商品 (上)

    商品的设计是电商系统中占据重要地位,如何设计出高扩展,高性能的商品系统并非一件简单的事情,我的设计是观摩互联网各大佬的设计后自行研究的,并非完全正确,但也不完全...

    CrazyCodes
  • MySQL获取每个分类下面的前三条数据

    现在项目遇到个问题,我相册图片里面有很多分类,我想取出每个分类下面的前三条数据,应该怎么做呢? 数据结构如下:

    用户7657330
  • 电商设计手册之用户体系

    一直从事互联网电商开发三年多的时间了,回头想想却对整个业务流程不是很了解,说出去很是惭愧。但是身处互联网电商的环境中,或多或少接触了其中的各个业务,其次周边还有...

    大愚
  • coder,你会设计交易系统吗(实干篇)?

    通过 上篇文章 的分析,我们已经明确了这个系统要干些什么。接下来的都是实打实的干货。这些内容认真阅读掌握后,相信你能够以此为基础设计一个维护性好、扩展性好的交易...

    大愚
  • 电商设计手册之基础商品信息

    第一篇我们主要看看一个入门的电商平台(B2C)如何去构建自己的基础商品信息,其实这个事情很简单,想想我们的现实生活,商家摆放商品到货架,客户从货架挑选商品,客户...

    大愚

扫码关注云+社区

领取腾讯云代金券