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

一、增加空间换时间

数据表
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性能,上面的规则也不是永远有效,还要考虑到运维部署,开发改动等,在实践中再改进。

原文链接:https://www.ffeeii.com/543.html

mysql 以空间换时间专研相关推荐

  1. FPGA之道(62)时空变换之空间换时间

    文章目录 前言 时空变换之空间换时间 缓存提速使用 模块复制 同频模块复制 缓存降频复制 缓存降频使用 逻辑拆分 流水线 流水线的由来 如何在组合逻辑中使用流水线 如何在时序逻辑中使用流水线 顺序系统 ...

  2. leetcode-383-Ransom Note(以空间换时间)

    题目描述: Given an arbitrary ransom note string and another string containing letters from all the magaz ...

  3. 前端遍历导致查询数据时间过长_OLAP 服务器,空间换时间可行吗?

    [摘要] 全量预汇总真的是提高 OLAP 性能的可行方案吗?点击了解OLAP 服务器,空间换时间可行吗? 多维分析提供拖拽.旋转.切片.钻取等等人机交互操作,必须有秒级的响应速度.而这些操作对应的明细 ...

  4. 空间换时间,查表法的经典例子

    前言 上一篇分享了:C语言精华知识:表驱动法编程实践 这一篇再分享一个查表法经典的例子. 我们怎么衡量一个函数/代码块/算法的优劣呢?这需要从多个角度看待.本篇笔记我们先不考虑代码可读性.规范性.可移 ...

  5. [hashmap|空间换时间] leetcode 1 两数之和

    [hashmap|空间换时间] leetcode 1 两数之和 1.题目 题目链接 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下 ...

  6. ie浏览器查看vue中js_浅析 Vue.js 中那些空间换时间的操作

    Hello,各位小伙伴,接下来的一段时间里,我会把我的课程<Vue.js 3.0 核心源码解析>中问题的答案陆续在我的公众号发布,由于课程的问题大多数都是开放性的问题,所以我的答案也不一定 ...

  7. 空间换时间--程序策略

    这几天修改一个去年做的程序,因为程序使用了xml保存的一些数据,整个xml文件结构欠佳,所以每次都需要对数据进行读取运算重新组合才能使用. 朋友需要这个程序多加点功能,于是顺便把这个去年做的不太好的地 ...

  8. 以空间换时间——动态规划算法及其应用:矩阵链相乘

    动态规划算法是5大算法基础中最重要的一个,它专门用来解决平面世界下的应用,即会多次使用二维数组. 当然动态规划算法是空间换时间的算法,也就是说:我们可以利用空间资源来使某算法问题的时间复杂度降到最低. ...

  9. 空间换时间--编程小绝招解决电话区号识别算法问题

    空间换时间问题通常都是一个不大的问题里的一个不小的解决方案.首先要理解代码中函数的一个大致的代价,在输入比较固定,计算输出又比较费劲的时候,常常就是空间换时间发挥作用的时候了.通过几个简单的例子您就会 ...

  10. 空间换时间——为字符串排序

    //按字典序排列字符串 //相同字母的大小写,小写放在大写的前面 //例如:R,B,B,b,W,W,B,R,B,w //排序后:b,B,B,B,B,R,R,w,W,W//思路,空间换时间. //将字符 ...

最新文章

  1. JS+CSS打造一款漂亮绿色相册代码
  2. Microsoft Agrees to Acquire ProClarity
  3. JqueryEasyUI 解决IE下datagrid无法刷新的问题
  4. 你所需要的java网络编程大总结
  5. 重磅 | 19 页花书精髓笔记!你可能正需要这份知识清单
  6. 【竞赛相关】Kaggle活跃竞赛的最新汇总
  7. Javascript 盲区和 操作实例 笔记
  8. 腾讯二面:@Bean 与 @Component 用在同一个类上,会怎么样?
  9. linux系统优化配置
  10. go语言 同步-读写锁
  11. 项目管理图书泄露章节-----关于项目内容中的其他
  12. 双“11”搞促销?用贪心算法盘它
  13. Win10怎么让英伟达独立显卡成为主显卡
  14. 玩玩小爬虫——试搭小架构
  15. mate7tl10是Android,华为Mate 7 MT7-TL10官方线刷包安卓5.1.1Rom刷机包
  16. Yii2 composer安装asset packagist 再提速 静态资源安装
  17. 深度学习——感知机:多层感知机(multi-layered perceptron)图文详解
  18. 求助!!C++ int接收的式子有小数但是所有的计算结果都是整数,最终结果错误的灵异事件。
  19. TemplateView , ListView ,DetailView三种常用类视图用法
  20. m35c android 4.4,索尼M35c拍照比之前有很大改善_索尼 Xperia SP_手机Android频道-中关村在线...

热门文章

  1. Bootstrap:文字排版与图片样式
  2. html 文字竖着排引号,文字竖排演示
  3. oracle去空格和换行,ORACLE 中去回车、空格、TAB的函数
  4. Halcon_3D点云筛选,目标轮廓提取,切平面求取目标间隙宽度
  5. 一招让你的百度网盘免费不限速下载,每秒宽带满速下载
  6. 2019各行业【知识地图】集锦
  7. 从几个实例来记忆Activity的生命周期
  8. 计算机组成原理实验二八位寄存器,计算机组成原理课后参考答案
  9. Python数据分析(9)-numpy文件读写
  10. heaps入门---1