千万级的大表!MySQL这样优化更好
对于一个千万级的大表,现在可能更多的是亿级数据量,很多人第一反应是各种切分,可结果总是事半功倍,或许正是我们优化顺序的不正确。下面我们来谈谈怎样的优化顺序可以让效果更好。
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吧!它成本最低,却又是一项费时费力的活,需要在技术与业务都熟悉的情况下,用心去优化才能做到最优,优化后效果也是立竿见影的!
最新文章
- 【笔记】Fragment使用
- jsp与数据库的连接
- To IOC,代码结构演变的随想
- 如何通过pid快速找出进程的路径
- 通过HTML条件注释判断IE版本的HTML语句详解<;!--[if IE]>; <;![endif]-->;
- bzoj3405:[Usaco2009 Open]Grazing2 移动牛棚
- Objective-C内存管理与原理
- rman catalog (rman 恢复目录)
- iOS开发之基于parse的登录注册
- android 环境使用smack 必须注冊的组件
- MySQL中索引的基础知识
- C#设计模式之七适配器模式(Adapter)【结构型】
- supervessel-免费云镜像︱GPU加速的Caffe深度学习开发环境
- php接口签名验证
- mysql 插件相关命令
- PTA4
- python3+ 简单爬虫笔记
- F - 质数检测 V2
- vs2015 打开项目自动运行 npm install
- Android下Notification,样式style,主题theme的功能实现
热门文章
- Codeforces Round #277.5 (Div. 2) B. BerSU Ball【贪心/双指针/每两个跳舞的人可以配对,并且他们两个的绝对值只差小于等于1,求最多匹配多少对】
- HttpClient 同时上传多个文件及参数, 同时利用 Web Api 接收
- Xamarin XAML语言教程隐藏文件使用Progress属性设置进度条
- mac-command-line-doing
- spring-----mvc的反射调用
- 弹出视图/弹出模态presentViewController与presentModalViewController
- tq2440实验手册qt编译问题
- JsonDataObjects序列和还原
- 设计模式之工厂模式之抽象工厂(php实现)
- django自定义过滤器及模板标签