数据库优化完全指南
来源:互联网 发布:支付宝如何登陆淘宝 编辑:程序博客网 时间:2024/06/11 18:03
数据库优化主要有以下四个维度.
一般来讲,从上到下,成本由高到低,效果由低到高.
- 硬件
- 系统配置
- 数据库表结构
- SQL及索引
之所以讲效果是由低到高的原因是因为,在我看来很多时候,查询慢都是由于mysql内部的锁机制,从而导致了一定的阻塞,而阻塞又导致了高并发,从而导致数据库出现问题.
以下分别从四个层面讲下大概优化的思路.
硬件
- 搞个Oracle啊
- 搞成主从数据库,实现读写分离啊.
系统配置
- TCP/IP最大连接数
- Linux打开文件数
- 关闭系统防火墙,它对于性能损耗也蛮大的.
数据库表结构
表的拆分
1. 水平拆分
表的水平拆分是为了解决单表过大的问题,水平拆分的每一个表的结构是一致的
常见的拆分方法:
- 对ID进行取余运算.
- 根据余数的不同,放到不同的表中
这种做法的问题:
- 跨分区表进行数据查询
- 统计以及后台报表
- 新插入数据的ID问题.
解决思路:
- 前后台表分开,前台注重效率,后台专注统计
- 维护一个专门的ID表.
2. 垂直拆分
所谓的垂直拆分,就是把原来一个具有很多字段的表拆分成多个表,这解决了表的宽度过宽问题.通常按照以下原则进行拆分:
1. 把不常用的字段放到一个表中
2. 把大字段独立放到一个表中
3. 把经常用的字段放到一个表中
选择合适的数据类型
有以下通用原则
- 使用可以存下你数据的最小的数据类型
- 使用简单的数据类型,如int要比varchar类型在mysql处理上简单
- 尽可能的使用not null定义字段,这会让字段需要的储存空间更小,增加了一次IO可以读取的数量
- 尽量少使用text类型,非用不可的时候最好考虑分表
其他的特殊字段的类型选择
1. 用unsigned int(10)来存储IP地址
2. 用unsigned int(10)来存储timestamp
SQL及索引
如何发现有问题的SQL
开启慢日志
如何分析SQL查询
使用explain 执行计划查看索引的使用情况
如何选择合适的列建立索引
- 在where从句,group by从句,order by从句,on从句中出现的列
- 索引字段越小越好
- 离散度大的列放到复合索引的前面
- 去除重复的索引,或者因业务逻辑变化不在用到的索引
如何查看已经建立的索引
show create table tb_name;
阅读全文
0 0
- 数据库优化完全指南
- gcc编译器完全优化指南
- MySQL数据库性能优化指南
- Oracle数据库性能优化指南
- Unix环境下Oracle数据库完全优化详解
- 完全优化MySQL数据库性能的八大巧方法
- 完全优化MySQL数据库性能的八个方法
- 完全优化MySQL数据库性能的八个方法
- 完全优化MySQL数据库性能的八个方法
- 完全优化MySQL数据库性能的八个方法
- 完全优化MySQL数据库性能的八大巧方法
- 完全优化MySQL数据库性能的八大巧方法
- 完全优化MySQL数据库性能的八大巧方法
- 完全优化MySQL数据库性能的八大巧方法
- 转发完全优化MySQL数据库性能的八大巧方法
- 完全优化MySQL数据库性能的八大巧方法
- 完全优化MySQL数据库性能的八大巧方法
- 完全优化MySQL数据库性能的八大巧方法
- 使用lldb中的一个小错误
- centos6.5上网2 链接无线网
- [数学模型]生猪的出售时机
- ubuntu sudo update与upgrade的作用及区别
- bzoj 2120: 数颜色(分块)
- 数据库优化完全指南
- 集成mybatis
- Java新手入门之第一个实验中的种种问题(文档完成代码,cmd运行代码)
- boost智能指针之shared_ptr,scoped_ptr,intrusive_ptr,weak_ptr源码简析
- 10-21 Walk through the forest(最短路预处理+建树)
- map容器的简单操作
- MGD 调试 Lives2d 文字破碎问题 (MX2)
- 2. Add Two Numbers
- 关于@JsonFormat的时区问题