数据库缓存优化
# MySQL数据库的优化
# 数据表数据类型的优化
需要考虑的两个问题:
- 字段使用什么样的数据类型更合适?
- 字段使用什么样的数据类型性能更快?
字段类型 | 考虑的问题 |
---|---|
int、tinyint、bigint | 考虑空间的问题、考虑范围的问题 |
char、varchar | 存储字符串长度是否固定 |
enum | 特定、固定的分类可以使用enum存储,效率更快 |
IP地址存储 | 使用整型存储IP地址 |
# 索引优化
索引的优化主要主要两个点:
- 建立合适的索引
- 索引在什么样的效率最高
# 索引的创建原则
- 索引并不是越多越好,在合适的字段上建立合适的索引,索引在提高读效率的同时,降低了写的效率
- 复合索引的前缀原则,对多个字段a,b,c建立索引 ,跳过a使用其他字段作为索引字段无法使用到索引
- like查询%的问题,如果%在前,无法命中索引
- 全表扫描的优化,mysql在查询的时候,优先走索引,如果单表查询的数据跟全表一样,就放弃索引,直接扫表
- or条件索引使用情况,如果or前面有索引后面没有索引的话则使用不到索引
- 字符串类型索引失效的问题,对于字符串类型的字段,在使用索引的时候,需要加''号,不然没法命中索引
# SQL语句的优化
需要考虑的几个方向:
- 优化过程中的数据访问
- 优化长难句的查询语句
- 优化特定类型的查询语句
# 优化过程中的数据访问
- 按需获取数据,使用limit
- 返回列避免使用*,直接使用列
# 优化长难句的查询语句
- 变复杂为简单,将复杂的SQL拆分为简单SQL
- 切分查询,对于大数据,分批处理
- 分解关联查询,拆分多个查询,有利用做数据层面的缓冲
# 优化特定类型的查询语句
- 优化count()
- 优化关联查询
- 优化子查询
- 优化GroupBy和distinct
- 优化limit和union
# 存储引擎的优化
需要考虑的点
- 尽量使用InnoDB进行存储,使用独立表空间,行锁
- 分区分库
- 分库分表
# 分区操作
- 通过特定的策略对数据表进行物理拆分
- 对用户透明
- parting by
# 分库分表
- 水平拆分,拆分热数据和冷数据
- 垂直拆分,拆分常用的列和不常用的列
# 数据库服务器架构的优化
需要考虑的点:
- 主从复制,使用MySQL binlog日志来实现主从复制
- 读写分离
- 双主热备
- 负载均衡,通过LVS的三种基本模式实现负载均衡或者MyCat数据库中间件实现负载均衡
上次更新: 2020/12/31, 06:55:18