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

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

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    NOI2015字符串游戏
    mathlover和她的粉丝团 西安电子科技大学第二届程序设计新生赛(同步赛)
    qko的烦恼 牛客练习赛34
    little w and Sum 牛客练习赛34
    little w and Soda 牛客练习赛34
    编辑器的选择 西安电子科技大学第二届程序设计新生赛(同步赛)
    or2?Scum! 西安电子科技大学第二届程序设计新生赛(同步赛)
    tokitsukaze and RPG 牛客练习赛33
    巴啦啦能量 哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(低年级)
    CentOSmini安装gcc8.2
  • 原文地址:https://www.cnblogs.com/Gool/p/9489767.html
Copyright © 2011-2022 走看看