数据库设计优化
- 使用varchar(变长)而非char
- 使用tinyint、smallint、mediumint而非int,非负加unsigned
- 尽量使用数字型字段,不要把数字型设计为字符型
- 合理使用索引:单列索引(普通索引index–>唯一索引unique index–>主键索引primary key)、组合索引(最左匹配)、全文索引(MyISAM引擎 char、varcahr、text)、空间索引(空间数据类型)。索引提高了select效率,降低了insert和update效率(<=6)
- 分表:(垂直)字段较多的表,有些字段使用频率较低,分离出新表;(水平)数据量大的按时间、区间分表
- 大量连接查询的表创建临时表,减少查询时的连接耗时
- 适当增加冗余字段,减少连接查询(单表>>多表)
sql语句优化(括号中为替代方案或注释)
- 避免跳过索引而进行全表扫描:避免where中null值判断(使用默认值0)、!=、<>、or(两边字段都为索引或使用union)、in(exists)、not in(between)、对字段进行表达式操作、对字段进行函数操作、like ‘%xxx’(like ‘xxx%‘)。
- 禁止使用 ‘*’
- 使用join替代子查询,避免频繁创建和删除临时表
- 用where替代having
- order by只有在order by中所有的列都包含在索引中以及所有的列都为非空才会使用索引
- 先过滤数据再进行group by
- 分析表、检查表、优化表:
a. 分析表主要是分析表中关键字的分布
analyze table user;
b. 检查表主要是检查表中是否存在错误
Check table user;
c. 优化表主要是消除删除或更新造成的表空间浪费
Optimize table user;执行中加只读锁。
硬优化
-
cpu、内存、磁盘
-
优化数据库参数:
key_buffer_size:索引缓冲区大小
table_cache:能同时打开表的个数
query_cache_size和query_cache_type:前者是查询缓冲区大小,后者是前面 参数的开关,0表示不使用缓冲区,1表示使用缓冲区,但可以在查询中使用 SQL_NO_CACHE表示不要使用缓冲区,2表示在查询中明确指出使用缓冲区才用 缓冲区,即SQL_CACHE
sort_buffer_size:排序缓冲区 -
分库分表、读写分离:主库写 从库读
-
缓存:本地缓存、缓存服务(redis)
来源:CSDN
作者:Chauncey_csdn
链接:https://blog.csdn.net/weixin_40213077/article/details/103958618