zoukankan      html  css  js  c++  java
  • 数据库优化

    • 优化shema、SQL语句
    • 索引
    • 缓存
    • 主从复制,读写分离
    • 数据拆分。垂直拆分,分布式;水平拆分,选择sharding key,改变表结构做一定的冗余,SQL语句尽量带sharding key
    • 优化分页,减少加载的数据

    优化分页:

    • 子查询。比如,select * from table where age > 20 limit 1000000,10 改成 select * from table where id in (select id from table where age > 20 limit 1000000,10),索引覆盖,要查询的字段都在索引中
    • 只允许逐页查询或者按照给定路线走,这样可预测。把可预测的提前查到数据放在缓存中

    通过慢查询优化SQL语句,优化方向:没有命中索引,加载不需要数据,数据量太大

    • 加载额外数据,又抛弃。优化语句
    • 语句执行计划,查看使用索引的情况。修改语句或索引,尽可能命中索引
    • 数据量太大,考虑拆分

    我们说下如何实现读写分离,以MySQL为例:

    1. MySQL-proxy代理
      1. 直接实现读写分离和负载均衡,不修改代码,主从用一样账号,官方不建议用
      2. 性能低,不支持事务
    2. dao
      1. mybatis通过mybatis plugin拦截SQL。inset、update、delete访问主库,查询访问丛库。plugin通过注解或分析语句选定主从库
      2. 重写DataSourceTransactionManager,将read-ONLY的事务放进读库,其余有读有写放进写库
    3. service
      1. 类内部方法通过this.xx()相互调用,aop不拦截,需特殊处理
      2. service决定数据源,支持事务  
  • 相关阅读:
    拓扑排序
    Frame Stacking 框架堆叠
    第二课 欧几里德算法与扩展欧几里德算法
    欧拉回路
    第一课 快速幂取模
    cookie使用汇总 c设置ookie的生命周期
    .net ArrayList的用法简介
    关于C#的partial修饰符
    sql server修改表结构的sql语句
    Web MVC模式中的基本表单提交
  • 原文地址:https://www.cnblogs.com/ivy-xu/p/12540638.html
Copyright © 2011-2022 走看看