zoukankan      html  css  js  c++  java
  • 数据库优化的一些方向

    数据库优化,sql与索引效果最明显,也是最简单的方法

    而想要优化sql和索引,首先就需要知道sql的性能如何,是否有效命中索引,索引匹配行数,查询消耗时间
    分析这些性能指标,借助sql分析工具是最常用的方法,使用SQLServer中的执行计划,能够看到sql每一个操作的消耗,预读行数
    有时候,我们不确定哪些sql最终会造成性能影响,就可以借助SQLServer Profiler工具,通过一段时间的监听,即可收集到所有耗时的sql

    sql优化的根本思路就是利用索引尽可能匹配最少的数据,获取数据时,尽可能只获取索引中包含的字段,这样就不会再去获取对应行的数据
    而索引的优化,则是选对首要字段,并包含常用的字段数据

    再下一步,就是数据库结构的优化

    表结构上,对于要联合多个表查询的数据,可以通过冗余字段来减少行筛选
    目前很多互联网公司都不使用外键,原因是外键其实就是一条索引,删除和更新外键会造成额外的性能开销

    对于数据量大的表格,添加时将锁住整个表,读取时由于索引非常庞大,查询起来效率也不高
    这种情况可以进行横向切割,将一个表拆分成多个表,切割可以是按数据量,也可以是时间
    当然,也可以使用动态表分区,表分区并不支持动态表分区,需要程序去实现

    除了横向切割之外,表还可以垂直切割,表现出来就是将字段存放到多个表中
    比如一个文章表,点击量,推荐量,这些数据频繁更新,更新的时候会锁住整个行,这个时候将他们分到另外一个表中,就不影响文章表的性能了

    在这一步基础上,还有硬件上去做优化

    数据库的性能瓶颈很大一部分是磁盘io速度慢造成的,当修改数据,插入数据,遍历行,这些操作会频繁操作io
    虽然数据库在结构上优化了对机械硬盘的读写速度,但是还是远远慢于内存中读写
    将机械硬盘换成读写速度更快的SSD,将会大大提升数据库的性能
    SSD的连续读写能力非常快,以我手上这块为例,连续读取速度达到了2G/S,是机械硬盘的20多倍

    硬件上也没办法优化了,那只有堆机器了
    分布式数据库是非常复杂的,目前我的研究也不多,就不提了

  • 相关阅读:
    设计模式之 原型模式
    设计模式之 策略模式
    设计模式之 单例模式
    使用IntelliJ IDEA 15和Maven创建Java Web项目(转)
    Java 内存分配全面浅析(转)
    java常量池概念 (转)
    java基本类型和包装类的区别(转)
    JAVA数据类型(转)
    SQL SERVER 2008 服务器登录名、角色、数据库用户、角色、架构的关系(转)
    视图的好处(转)
  • 原文地址:https://www.cnblogs.com/Gool/p/9489767.html
Copyright © 2011-2022 走看看