数据库优化方案整理

会有一股神秘感。 提交于 2020-01-13 19:20:09

数据库设计优化

  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)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!