mysql优化方向

作者: JONE 分类: 编程 发布时间: 2021-04-29 23:12
  1. redis 或者 memcache 缓存减少数据库压力
  2. 数据库安全
    1. 外网不可访问(3306端口)
    2. 禁止弱口令
    3. 用户管理权限,给每个数据库分配单独的账号,甚至根据实际情况,设置账号的可读可写权限
    4. 禁用root权限操作
    5. ip白名单限制其它ip访问
    6. 数据库定时备份
  3. 数据库的基本配置
    1. 最大连接数
    2. innodb_lock_wait_timeout 锁超时时间(秒)
    3. tmp_table_size 临时表数量
  4. 数据库存储引擎,innodb与myisam 的取舍
  5. 三范式,每列的原子性,每行的唯一性,数据的去冗余,以及反三范式
  6. 数据库字段类型取舍,sql语句的优化
  7. 基本的索引,主键、唯一索引、普通索引、组合索引、最左原则
  8. eplain 或者 desc 执行计划,查看并分析具体sql语句中索引的使用情况
  9. 设置慢查询参数,开启慢查询日志,分析执行慢的sql语句进行优化
  10. profile 查看具体执行时间,找出执行慢的sql语句并进行优化
  11. 事务的四大特性:
    1. 原子性,要么一起成功,要么一起回滚
    2. 一致性,事务执行前后,数据都是合法状态
    3. 隔离性,默认隔离级别,可重复读
    4. 永久性,执行成功,则保存到了硬盘中
  12. 事务隔离性带来的问题,脏读、不可重复读、幻读
    1. 脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
    2. 不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。
    3. 幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。
    4. 小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表
  13. 隔离级别
    1. 读未提交,脏读:是,不可重复读:是,幻读:是
    2. 不可重复读,脏读:否,不可重复读:是,幻读:是
    3. 可重复读,脏读:否,不可重复读:否,幻读:是,mysql默认隔离级别,
    4. 串行化,,脏读:否,不可重复读:否,幻读:否
  14. 锁,表锁、行锁、排它锁、意向锁、循环锁(死锁)等
  15. 查询缓存(查询缓存的弊端),分析查询缓存的使用情况和命中率
  16. 对于数据量较大的数据比如数据量超千万,进行逻辑分区,逻辑分区可以根据
    1. list 条件分区,根据“字段的内容值”是否在某个“列表”中进行分区,通过预定义的列表的值来对数据进行分割
    2. range 范围分区,根据“字段内容的值”是否在 某个范围进行分区,通过预定义的范围值来对数据进行分割
    3. hash 哈希分区,只能针对整数进行,允许通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区
    4. key 分区,KEY分区支持除text和BLOB之外的所有数据类型的分区
  17. 进行物理分表(水平分表),比如用户日志,可以根据每月一张表来进行物理分表,通过应用程序进行控制
  18. 进行垂直分表,把冷热字段分开来设计,减少数据库的资源开销
  19. 主从复制,读写分离
  20. 全文索引,用 sphinx 或者 es 或者 框架自带的全文索引组件

相关链接:

mysql 性能优化方向 https://www.cnblogs.com/AloneSword/p/3207697.html

MySQL性能的五大配置参数 https://blog.csdn.net/xifeijian/article/details/19775017