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决定数据源,支持事务  
  • 相关阅读:
    Django项目:CMDB(服务器硬件资产自动采集系统)--01--01CMDB获取服务器基本信息
    rabbitmq 实现多个消费队列
    mssql附加的数据库查询的时候没有搜索权限
    mvc 返回json格式时间格式化
    HighChat动态绑定数据 数据后台绑定(四)
    双向绑定
    v-bind 属性绑定
    v-on 事件触发
    v-text和v-html绑定数据显示
    插值表达式
  • 原文地址:https://www.cnblogs.com/ivy-xu/p/12540638.html
Copyright © 2011-2022 走看看