对于一个千万级的大表,现在可能更多的是亿级数据量,很多人第一反应是各种切分,可结果总是事半功倍,或许正是我们优化顺序的不正确。下面我们来谈谈怎样的优化顺序可以让效果更好。

MySQL数据库一般都是按照下面的步骤去演化,成本也是由低到高:

1/ SQL优化

1. 避免使用select *

  • 返回结果过多,降低查询的速度;

  • 过多的返回结果,增加数据传输量;

2. 可确定返回记录数的,尽量增加limit n;

3. 尽量少用like查询,会导致索引失效;

2/ 软件优化

1. 选择合理的引擎

  • MyISAM索引顺序访问方法,支持全文索引,非事务安全,不支持外键,会加表级锁;

  • InnoDB事务型存储引擎,加行锁,支持回滚,崩溃恢复,ACID事务控制;

2. 正确使用索引

  • 结合适的列表建立索引;

  • 索引值应该不相同,唯一值时效果最好,大量重复效果很差;

  • 不能滥用索引,索引占用空间;

  • 使用短索引,存的索引多,消耗IO更小,能提高查找速度;

3. 字段尽量设置成NOT NULL

  • NULL占空间,对于Java和OC强类型的,容易千万APP闪退;

4. MySQL分区表

3/ 硬件优化

1. Linux内核用内存开缓存存储数据;

2. 增加应用缓存,例如Memcached、Redis读写性能非常高;

3. 用SSD代替机械硬盘

  • 日志和数据分开存储,日志顺序读写 - 机械硬盘,数据随机读写 - SSD;

4. SSD+SATA混合存储,对热数据缓存,例如:FlashCache;

4/ 架构优化

1. 读写分离

  • 可以把数据库读和写拆开,对应主从服务器,主服务器写操作、从服务器是读操作;

  • 读是一些机器,写是一些机器,二进制文件的主从复制,延迟解决方案;

  • 主服务器写操作的同时,同步到从服务器,保持数据完整性——主从复制;

2. 垂直拆分

  • 根据模块的耦合度,将一个大的系统分为多个小的系统,也就是分布式系统;

  • 字段分成多个表;

3. 水平拆分

  • 分表:数据分成多个表,拆分后的每张表的表头相同;

  • 分库:类型方案有Cobar(阿里开源,无更新)、MyCat(基于Cobar);

总结

尽我们所能去优化SQL吧!它成本最低,却又是一项费时费力的活,需要在技术与业务都熟悉的情况下,用心去优化才能做到最优,优化后效果也是立竿见影的!

千万级的大表!MySQL这样优化更好的更多相关文章

  1. phper使用MySQL 针对千万级的大表要怎么优化?

    有需要学习交流的友人请加入交流群的咱们一起,群内都是1-7年的开发者,希望可以一起交流,探讨PHP,swoole这块的技术 或者有其他问题 也可以问,获取swoole或者php进阶相关资料私聊管理即可 ...

  2. MySQL 对于千万级的大表要怎么优化?

    作者:哈哈链接:https://www.zhihu.com/question/19719997/answer/81930332来源:知乎著作权归作者所有,转载请联系作者获得授权. 第一优化你的sql和 ...

  3. MySQL 对于千万级的大表要怎么优化

    转自知乎 作者:哈哈链接:http://www.zhihu.com/question/19719997/answer/81930332来源:知乎著作权归作者所有,转载请联系作者获得授权. 很多人第一反 ...

  4. mysql大表设计以及优化

    MYSQL千万级数据量的优化方法积累https://m.toutiao.com/group/6583260372269007374/?iid=6583260372269007374 MySQL 千万级 ...

  5. Mysql千万级记录表分表策略

    目前,比较流行的分表为2倍扩容. 表A(id, name, age, sex) 基于自增id分表, 通过触发器先同步A到B, 程序通过mod 2操作数据,然后drop掉触发器,在 删除两个A表的偶数i ...

  6. 记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案(转)

    问题概述 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死.严重影响业务 ...

  7. 转载:记录一次MySQL两千万数据的大表优化解决过程

    地址:https://database.51cto.com/art/201902/592522.htm 虽然是广告文,但整体可读性尚可.

  8. 记一次SqlServer大表查询语句优化和执行计划分析

    数据库: sqlserver2008r2 表: device_data 数据量:2000w行左右 表结构 CREATE TABLE [dbo].[device_data]( [Id] [int] ID ...

  9. jQuery.Validate.js验证大表单的优化

    最近在项目中有遇到一个Form表单中有200多个标签.在提交表单时网页会出现等待时间很长,甚至会出现网页奔溃的情况. 主要的原因是因为在使用jQuery.Validate.js进行Form验证的时候会 ...

随机推荐

  1. 51nod 1051 最大子矩阵和 【最大子段和DP变形/降维】

    [题目]: 一个M*N的矩阵,找到此矩阵的一个子矩阵,并且这个子矩阵的元素的和是最大的,输出这个最大的值. 例如:*3的矩阵: - - - - 和最大的子矩阵是: - - Input 第1行:M和N, ...

  2. 51nod 1096 距离之和最小【中位数】

    1096 距离之和最小 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 X轴上有N个点,求X轴上一点使它到这N个点的距离之和最小,输出这个最小的距离 ...

  3. servlet多线程同步问题

    Servlet/JSP技术和ASP.PHP等相比,由于其多线程运行而具有很高的执行效率.•由于Servlet/JSP默认是以多线程模式执行的,所以,在编写代码时需要非常细致地考虑多线程的同步问题.•如 ...

  4. Python的并发并行[4] -> 并发[1] -> concurrent.future 模块

    concurrent.future 模块 1 thread模块 / thread Module 1.1 常量 / Constants Pass 1.2 函数 / Function Pass 1.3 类 ...

  5. Python的程序结构[1] -> 方法/Method[0] -> 类实例方法、私有方法和抽象方法

    类实例方法.私有方法和抽象方法 Python中最常用的就是类实例方法,类似于属性中的类实例属性,同时,也存在与私有属性类似方法,即私有方法,下面介绍这两种常见的方法,以及一种特殊意义的类实例方法 -- ...

  6. POJ1273 Drainage Ditches (网络流)

                                                             Drainage Ditches Time Limit: 1000MS   Memor ...

  7. 在CentOS 7上安装Node.js

    一.安装1.进入官网下载最新版本https://nodejs.org/en/ 选择下载后上传或直接使用wget下载 wget https://nodejs.org/dist/v8.11.2/node- ...

  8. Mybatis中的XML中需要用到的转义符号整理

    使用这么久的Mybatis中需要转义的符号整理一下,小结一下: 1.       <         小于符号        < 2.       <=       小于等于     ...

  9. 检索COM 类工厂中CLSID 为{00024500-0000-0000-C000-000000000046}组件时失败

    检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005 当在ASP.NET应用程序中引 ...

  10. sqoop使用记录

    sqoop简介 Sqoop是用来实现结构型数据(如关系数据库)和Hadoop之间进行数据迁移的工具.它充分利用了MapReduce的并行特点以批处理的方式加快数据的传输,同时也借助MapReduce实 ...