MySQL数据库层的优化
优化方向
- 数据表数据类型优化
- 索引优化
- SQL语句优化
- 存储引擎的优化
- 数据表结构设计的优化
- 数据库服务器架构的优化
- 数据表数据类型优化
- tinyint < smallint < bigint
根据业务需求选择不同的数据类型;
考虑空间的问题,考虑范围的问题;
- tinyint < smallint < bigint
- char,varchar
varchar用于村粗可变字符串,它比定长类型节省时间
varchar使用1-2个额外字符记录字符串的长度,列长度小于255字节,使用1字节标识,否则用2个
varchar 长度,如果存储长度超过指定长度,会被截断;
char是定长,根据定义的字符串长度分配足够的存储空间
char会根据需求采用空格填充空间以方便比较
char适合存储固定或者所有值接近同一个长度
char长度超过设定长度,会被截断;
- enum
特定,固定的分类可以使用enum存储,效率更高;
IP地址的存储
- 如果需要进行优化 可以使用ip2long和long2ip转换为整型,使用整型进行存储
- 索引的优化
索引的创建原则
- 索引不是越多越好,在合适的字段上创建合适的索引;
- 复合索引的前缀原则
索引的注意事项
- 复合索引的索引原则
- like查询%的问题
- 全表扫描优化
- or条件索引使用情况
- 字符串类型索引失效的问题
- SQL语句优化
优化查询过程中的数据访问
- 使用limit
- 返回列不用*
优化长难句的查询语句
- 变复杂为简单
- 切分查询
- 分解关联查询
优化特定类型的查询语句
- 优化count();
- 优化关联查询
- 优化子查询
- 优化Group bu和distinct
- 优化limit和union
- 存储引擎的优化
量使用InnoDB存储引擎
- 数据表结构设计的优化
- 分区操作
通过特定的策略对数据表进行物理拆分
对用户透明
partition by
- 分库分表
水平拆分
垂直拆分
- 数据库架构的优化
- 主从复制
- 双主热备
- 读写分离
- 负载均衡
MySQL的负载均衡
通过LVS的三种基本模式实现负载均衡
MyCat数据库中间件实现负载均衡