个人的观点,这种大表的优化,不一定上来就要分库分表,因为表一旦被拆分,开发、运维的复杂度会直线上升,而大多数公司和开发人员是欠缺这种能力的。

所以MySQL中几百万甚至小几千万的表,先考虑做单表的优化。

单表优化

单表优化可以从这几个角度出发:

1.表分区

MySQL在5.1之后才有的,可以看做是水平拆分,分区表需要在建表的需要加上分区参数,用户需要在建表的时候加上分区参数;

分区表底层由多个物理子表组成,但是对于代码来说,分区表是透明的;

SQL中的条件中最好能带上分区条件的列,这样可以定位到少量的分区上,否则就会扫描全部分区。

2.增加缓存

主要的思想就是减少对数据库的访问,缓存可以在整个架构中的很多地方;

比如:数据库本身有就缓存,客户端缓存,数据库访问层对SQL语句的缓存,应用程序内的缓存,第三方缓存(如Redis等);

3.字段设计

单表不要有太多字段;

VARCHAR的长度尽量只分配真正需要的空间;

尽量使用TIMESTAMP而非DATETIME;

避免使用NULL,可以通过设置默认值解决。

4.索引优化

索引不是越多越好,针对性地建立索引,索引会加速查询,但是对新增、修改、删除会造成一定的影响;

值域很少的字段不适合建索引;

尽量不用UNIQUE,不要设置外键,由程序保证;

5.索引优化

尽量使用索引,也要保证不要因为错误的写法导致索引失效;

比如:避免前导模糊查询,避免隐式转换,避免等号左边做函数运算,in中的元素不宜过多等等;

6.NoSQL

有一些场景,可以抛弃MySQL等关系型数据库,拥抱NoSQL;

比如:统计类、日志类、弱结构化的数据;事务要求低的场景。

表拆分

数据量进一步增大的时候,就不得不考虑表拆分的问题了:

1.垂直拆分

垂直拆分的意思就是把一个字段较多的表,拆分成多个字段较少的表;上文中也说过单表的字段不宜过多,如果初期的表结构设计的就很好,就不会有垂直拆分的问题了;一般来说,MySQL单表的字段最好不要超过二三十个。

2.水平拆分

就是我们常说的分库分表了;分表,解决了单表数据过大的问题,但是毕竟还在同一台数据库服务器上,所以IO、CPU、网络方面的压力,并不会得到彻底的缓解,这个可以通过分库来解决。

水平拆分优点很明显,可以利用多台数据库服务器的资源,提高了系统的负载能力;缺点是逻辑会变得复杂,跨节点的数据关联性能差,维护难度大(特别是扩容的时候)。

我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注;关注我后,可私信发送数字【1】,获取学习资料。

oracle单表数据量上亿_MySQL数据库中,数据量越来越大,有什么具体的优化方案么?...相关推荐

  1. mysql 从库数据损坏_MySQL数据库中数据损坏恢复全过程

    MySQL数据库中数据损坏恢复全过程 前几天因为MySQL数据库部分数据损坏原因,我尝试了下恢复数据,之后整理以下文档,供各位参考,以备各位同事以后如有类似问题,可以少走些弯路,尽快解决问题. 环境: ...

  2. mysql数据库中删除数据用什么语句_mysql数据库删除数据语句

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  3. oracle中的表怎样保存,怎样保存excel 表格数据库中-如何将excel表格更新oracle数据库中数据...

    如何将excel表格更新oracle数据库中数据 这里以SQL SERVE2008为例.SQLSERVER2008有一个"数据导入导出功能",当然我们也可以打开数据库之后,在数据库 ...

  4. fileUpload实现普通表单和file图片上传到数据库

    fileUpload实现普通表单和file图片上传到数据库 效果图: 实现 jsp:页面 servelt:控制器 service:逻辑操作 dao:数据库操作 domain:javaBean类 首先需 ...

  5. mysql显示表已存在_MySQL数据库与数据表的相关操作

    数据库相关操作: 显示数据库:show databases; 如果是0.00秒并不代表没有花费时间,而是时间非常短,小于0.01秒. 创建数据库: Query OK表示创建成功,1行受到影响,处理时间 ...

  6. hash oracle 分表_一致性Hash算法在数据库分表中的实践

    最近有一个项目,其中某个功能单表数据在可预估的未来达到了亿级,初步估算在90亿左右.与同事详细讨论后,决定采用一致性Hash算法来完成数据库的自动扩容和数据迁移.整个程序细节由我同事完成,我只是将其理 ...

  7. 一起ORACLE数据库中数据查询结果不一致问题的排查过程

    一.问题描述 在某软件开发项目中,需要在ORACLE数据库中建立十张类型相同的员工信息表tb_employeeinfo0~tb_employeeinfo9,并建立向这十张表中插入数据的存储过程.ORA ...

  8. mysql数据库函数转义函数_MySql数据库-查询、插入数据时转义函数的使用

    最近在看一部php的基础视频教程,在做案例的时,当通过用户名查询用户信息的时候,先使用了转义函数对客户提交的内容进行过滤之后再交给sql语句进行后续的操作.虽然能看到转义函数本身的作用,但是仍然有一些 ...

  9. mysql数据锁的类型_MySQL数据库锁类型

    锁概念: 当高并发访问同一个资源时,可能会导致数据不一致,需要一种机制将用户访问数据的顺序进行规范化,以保证数据库数据的一致性.锁就是其中的一种机制. 一个栗子 :以买火车票为例,火车票可面向广大消费 ...

最新文章

  1. 如何解决多地开视频会议直播问题?
  2. android蓝牙扫描中断,一段时间后,Android蓝牙Le扫描仪停止运行
  3. 【深度学习笔记】CUDA
  4. 一句话说清楚NodeJS中module.exports和exports的区别
  5. 【opencv】16.截取图像中的一个roi区域时,判断该roi是否越界
  6. BugkuCTF-Misc:多种方法解决
  7. 大华服务器装系统,clonezilla安装系统理论篇
  8. sqlserver2008r2安装_SQL2008R2图文安装步骤详解
  9. 浙江大学14届计算机学院孙晓宇,郑州外国语学校2011年保送生录取名单
  10. 关于五笔字型学习五笔难拆汉字学习总结
  11. 玩转Luat 基础篇②——时间同步ntp.timeSync
  12. 前端使用滑块滑动进行验证的思路
  13. Unity 接入高德开放API - 天气查询
  14. Exynos4412开发板
  15. COI 2020 Semafor(矩阵乘法+优化)
  16. 刻录原版系统光盘(用软碟通)
  17. VS2015安装配置SQLite3数据库
  18. 顺丰,披着快递马甲的科技公司?
  19. JAVA毕业设计H5新冠防疫宣传网站设计与实现计算机源码+lw文档+系统+调试部署+数据库
  20. 系统安装部署系列教程(五):精简母盘和集成补丁

热门文章

  1. 在 Windows 内核上运行 Docker 靠谱吗?专家六问六答帮你解惑!
  2. 两个简单的动态规划问题,0-1背包和最大不相邻数累加和,附递归c代码
  3. [译]php和curl_multi_exec
  4. 框架之---Django
  5. 全民大数据时代已来 阿里数加平台详解
  6. ScrollView中的LinearLayout不能使用android:layout_heig...
  7. redis、memcache、mongoDB有哪些区别?
  8. phpcms数据库操作
  9. 学习云计算前景如何?新的一年Linux运维职业选择有哪些?
  10. 批量将PNG转为JPG