数据库优化方案整理

数据库设计优化


1.使用varchar(变长)而非char。

2.使用tinyint、smallint、mediumint而非int,非负加unsigned。

3.尽量使用数字型字段,不要把数字型设计为字符型。

4.合理使用索引:单列索引(普通索引index–>唯一索引unique index–>主键索引primary key)、组合索引(最左匹配)、全文索引(MyISAM引擎 char、varcahr、text)、空间索引(空间数据类型)。索引提高了select效率,降低了insert和update效率(<=6)。

5.分表:(垂直)字段较多的表,有些字段使用频率较低,分离出新表;(水平)数据量大的按时间、区间分表。

6.大量连接查询的表创建临时表,减少查询时的连接耗时。

7.适当增加冗余字段,减少连接查询(单表>>多表)。

sql语句优化(括号中为替代方案或注释)


1.避免跳过索引而进行全表扫描:避免where中null值判断(使用默认值0)、!=、<>、or(两边字段都为索引或使用union)、in(exists)、not in(between)、对字段进行表达式操作、对字段进行函数操作、like ‘%xxx’(like ‘xxx%‘)。

2.禁止使用 ‘*’

3.使用join替代子查询,避免频繁创建和删除临时表。

4.用where替代having。

5.order by只有在order by中所有的列都包含在索引中以及所有的列都为非空才会使用索引。

6.先过滤数据再进行group by。

7.分析表、检查表、优化表:

a. 分析表主要是分析表中关键字的分布

analyze table user;

b. 检查表主要是检查表中是否存在错误

Check table user;

c. 优化表主要是消除删除或更新造成的表空间浪费

Optimize table user;执行中加只读锁。

硬优化


1.cpu、内存、磁盘。

2.优化数据库参数:

key_buffer_size:索引缓冲区大小;

table_cache:能同时打开表的个数;

query_cache_size和query_cache_type:前者是查询缓冲区大小,后者是前面 参数的开关,0表示不使用缓冲区,1表示使用缓冲区,但可以在查询中使用 SQL_NO_CACHE表示不要使用缓冲区,2表示在查询中明确指出使用缓冲区才用 缓冲区,即SQL_CACHE。

sort_buffer_size:排序缓冲区。

3.分库分表、读写分离:主库写 从库读。

4.缓存:本地缓存、缓存服务(redis)。

编辑整理 丨熊玉锦

发表评论

登录后才能评论
服务中心
服务中心
联系客服
联系客服
返回顶部