zoukankan      html  css  js  c++  java
  • DBMS优化基础

    一:硬件调优

      决定dmbs性能因数有两个,硬件和软件。使用频率高的cpu、使用多处理器、加大内存容量、增加Cache、提高网络速度

      但这些对系统心梗的提高是有限的

    二:sql调优

      1、调优原则:
        ‘二八’原则,将主要精力耗费在20%的最消耗系统资源的sql语句中,不要期望把所有的sql语句都调整到最优状态

      2、索引:
        索引是数据库调优的最根本优化方法,可以说索引是一切优化方法的内功。

        根据索引顺序与数据表的物理顺序是否相同,可以将索引分为两类:聚簇索引,数据表的物理顺序和索引顺序相同;非聚簇索引,物理顺序和索引顺序不同

    如汉语字典的拼音目录是聚类索引,偏旁部首为费聚类索引。应该在标准经常搜索的列或者安装顺序访问的列上创建聚类索引,聚类索引只能有一个,因为物理顺序只有一个,非聚类索引可以有多个

        索引占据存储空间,因而创建必备的索引,一般是在检索需要读字段中创建索引。

        索引会造成存储碎片问题,当删除一条记录时候会导致对应的索引记录为空,由于采用B数结构,对应索引不会删除,一段时间后出现大量的存储碎片,这些不仅会占用存储空间,更会降低数据库运行速度,如果存储碎片过多,则需要整理。最简单的是重建索引

      3、表扫描和索因查找

        一般数据访问采用:全表扫描和索因查找

        如果表中有索引并且带匹配条件符合索引,则不会执行全表扫描。会直接去 索引加大查询速度(使用不当检索依旧会采用全表扫描)

      4、常用优化手法

        <1>创建必备的索引

        <2>使用预编译查询,程序通常根据用户动态输入执行sql语句,这时候应该尽量使用参数化sql,不仅避免sql注入漏洞工具,而且第一次执行的时候dbms会对申请了语句进行查询优化且执行预编译,以后在这执行这个sql的时候就直接使用预编译的结果,大大提高执行速度

        <3>调整where子句的连接顺序

          DBMS一般采用自下而上的顺序解析where语句,因此表连接最好建立在其他where条件之前,那些可以过滤到大数量记录的条件写在where子句的末尾

        <4>SELECT语句避免使用*

        <5>尽量将多条sql语句压缩到一句sql中

        <6>用WHERE字句替换having

          having只会在检索出所有结果后对结果集进行过滤。如果能通过where限制记录数目,则能减少开销,having的条件一般用具聚合函数过滤,除此之外,应该讲条件写在where子句之外

        <7>使用表的别名

          当在SQL语句中连接多个表时,请使用表的别名并把别名前缀于每个列名上。这样就可以减少解析的时间并减少那些由列名歧义引起的语法错误

        <8>用exists代替in

          在查询中,为了满足一个条件,往往需要对另一个表进行联接,在这种情况下,使用EXISTS而不是IN通常将提高查询的效率,因为IN 子句将执行一个子查询内部的排序和合并。下面的语句2就比语句1效率更加高。

                 

        <9>用表连接替换你exists

          通常来说,表连接的方式比EXISTS更有效率,因此如果可能的话尽量使用表连接替换EXISTS。下面的语句2就比语句1效率更加高。

               

        <10>避免在索引列上使用计算

            在WHERE子句中,如果索引列是计算或者函数的一部分,DBMS的优化器将不会使用索引而使用全表扫描。

            正确写法

               

            同样的,不能在索引列上使用函数,因为函数也是一种计算,会造成全表扫描。下面的语句2就比语句1效率更加高。

               

     参考地址 : http://www.cnblogs.com/cnjavahome/p/4230534.html

  • 相关阅读:
    [BZOJ2969] 矩形粉刷
    数字 (number)
    字符串(String)
    小HY的四元组
    最大公约数(Max Gcd)
    [洛谷P2102] 地砖铺设
    Python OS模块(内置模块)
    json解析神器--jsonpath
    kafka 优势+应用场景
    Python之异常处理
  • 原文地址:https://www.cnblogs.com/jiangweili/p/9308434.html
Copyright © 2011-2022 走看看