发布于 5年前

MySQL数据层的优化总结

数据表数据类型优化

字段使用什么样的数据类型更合适,字段使用什么样的数据类型性能更快

  • tinyint smalint bigint 考虑空间的问题,考虑范围的问题
  • char varchar
  • enum 特定、固定的分类可以使用enum存储,效率更快

索引优化

  • 索引并不是越多越好,在合适的字段上创建合适的索引
  • 复合索引的前缀原则
  • like查询%的问题
  • 全表扫描优化(例:在100条记录中查询98条记录,全表扫描比索引更快,那么会自动放弃索引)
  • or条件索引使用情况(or前列有索引,后没有索引,会索引失效)
  • 字符串类型索引失效的问题(数据库中存的是字符串,查询时没有加引号,则索引失效)

SQL语句的优化

优化查询过程中的数据访问

  • 使用limit
  • 返回列不用 *

优化长难句的查询语句

  • 变复杂为简单
  • 切分查询
  • 分解关联查询

优化特定类型的查询语句

  • 优化count()
  • 优化关联查询
  • 优化子查询,使用关联查询替代
  • 优化 Group by 和distinct
  • 优化limit 和 union

存储引擎的优化

尽量使用InnoDB存储引擎

数据表结构设计的优化

分区操作

  • 通过特定的策略对数据表进行物理拆分
  • 对用户透明
  • partition by

分库分表

  • 水平拆分(行)(例:活跃的与不活跃的)
  • 垂直拆分 (列)(问题:常用列和不常用列都需要显示时,需要连接查询)

数据库服务器架构的优化

  1. 主从复制

  2. 读写分离

  3. 双主热备 1,2,3可以使用MySQL的binlog日志和中继日志,通过主库和从库的binglog的事件来回交换实现

  4. 负载均衡

    • 通过LVS的三种基本模式实现负载均衡
    • MyCat数据库中间件实现负载均衡(更简单,性能比 LVS 差)
©2020 edoou.com   京ICP备16001874号-3