一、数据类型的优化
使用什么样的类型更合适,性能更快
- tingint(255)、smallint、int、bigint(上千万上亿)考虑空间的问题和范围的问题
- char、varchar 存储字符串长度是否固定
- enum 特定、固定的分类可以使用enum存储,效率更快
- IP地址的存储 ip2long 整型存储
tinyint
从 -2^7 (-128) 到 2^7 - 1 (123) 的整型数据。存储大小为 1个字节。
unsigned 是从 0 到 255 的整型数据。
所以建表的时候 只能是tinyint(3),哪怕你建tinyint(100),他最大还是3位这么多。
smallint
从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。存储大小为 2 个字节。
unsigned 是从 0 到 65535 的整型数据。
所以建表的时候 只能是smallint(5),哪怕你建smallint(100),他最大还是5位这么多。
int
从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647)的整型数据(所有数字).存储大小为 4 个字节。
unsigned 是从 0 到 4294967296 的整型数据。
所以建表的时候 只能是int(10),哪怕你建int(100),他最大还是10位这么多。
bigint
从 -2^63 (-9,223,372,036,854,775,808) 到 2^63-1(9,223,372,036,854,775,807) 的整型数据(所有数字)。存储大小为 8 个字节。
unsigned 是(自己算吧)
所以建表的时候 只能是bigint(20),哪怕你建bigint(100),他最大还是20位这么多。
二、索引的优化
建立合适的索引
- 索引不是越多越好,在合适的字段是创建索引
- 符合索引的前缀原则
- like查询%问题 %不能在前,可以使用全文索引
- 全表扫描优化 如果MySQL估计使用索引比全表扫描更慢,会放弃使用索引
- OR条件使用情况,如果or前的条件中的列有索引,后面的没有,索引都不会被用到
- 字符串类型索引失效的情况
三、SQL语句的优化
1、优化查询过程中的数据访问
- 使用limit
- 返回列不适用
2、优化长难句的查询语句
- 变复杂为简单
- 切分查询
- 分解关联查询
3、优化特定类型的查询语句
- 优化count()
- 优化关联查询
- 优化子查询
- 优化group by 和distinct
- 优化limit和union 记录上次查询最大ID
四、存储引擎的优化
尽量使用InnoDB
InnerDB和MyISAM的区别
- InnerDB支持事务
- InnerDB支持行锁
- InnerDB支持外键
- InnerDB支持崩溃后的安全恢复
- InnerDB数据存储在共享表空间
五、数据库结构设计的优化
1、分区操作
通过特定的策略对数据表进行物理拆分
对用户透明
Partition by
2、分库分表
水平拆分
垂直拆分
六、数据库服务器架构的优化
- 主从复制
- 读写分离
- 双主热备
- 负载均衡 lvs的三种基本模式实现负载均衡,mycat数据库中间件实现负载均衡
网友评论