zoukankan      html  css  js  c++  java
  • SQL Server查询优化方案概括


    下面暂从硬件、SQL优化、SQL Server软件设置、数据压缩四个方面进行概括:
    一、硬件调优
    硬件类型划分:内存、CPU、硬盘、网络
    通过SQL Server的“活动监视器”-“最近耗费大量资源的查询”功能,通过对CPU耗时和执行次数排序,
    这里假设所有语句的并发数与执行时长均合理,以此判定CPU是否满足生产需求;

    抛开内存表,只看传统表在任务执行时内存和硬盘的互相读写情况,
    我们可以通过windows自带的“性能监视器”——“数据收集器集”功能,甄别内存和硬盘是否需要升级;

    再看网络:目前企业内部均使用千兆口,若数据库需提供互联业务,此时便需要将公网上下线带宽考虑进来。


    二、SQL代码的调优
    1.避免where子句使用!=和<>操作符,导致放弃使用索引而进行全表扫描;
    2.避免where子句使用or连接条件,导致放弃使用索引,可改用union all
    3.使用like模糊查询也将导致全表扫描;
    4.in和not in也需要慎用,同样会导致全表扫描,如:select id From a where num in('a','b','c')
    ----能用between就不要用in
    5.避免where子句中对字段进行表达式操作,这将导致引擎放弃使用索引而全表扫描;
    6.select id from t where num/2=10, 应该改为select id from t where num=20
    7.避免在where子句中对字段进行函数操作,这将导致全表扫描;
    8.根据“From面积”善用多表连接查询、嵌套子查询、相关子查询;
    9.distinct关键字,将直接导致查询降速;
    10.判断表中是否存在数据,善于从多种选择中挑选性能消耗低的语句
    select count(*) from product
    select top(1) id from product order by id desc

    三、软件调优
    1.条件允许的情况下,可选择搭建SQL Server AlwaysOn可用性组实现读写分离;
    可参考:https://www.cnblogs.com/jenrrychen/p/5471332.html

    2.存储拆分(分表+分磁盘)
    例如:
    一个表对应一个文件组,一个文件组对应多个文件;
    一个表拆分成多个分区表(根据分区方案与分区函数,例按每100万条记录、或按记录创建时间设置分区规则),
    最终实现一个表对应多个分区表,一个分区表对应一个文件组,一个文件组可以对应多个文件,我们可以将频繁读写的文件组存储在高性能磁盘上,对存档的文件组还可以设置为只读。


    四、数据压缩
    1.条件允许的情况下,定期合理清理数据库日志;
    2.使用dbcc showcontig(tablename) 可直观的查阅表的 “平均页密度”,经常执行删除操作的表平均页密度越低。
    行压缩
    --所有数字类型(INT、NUMERICA等)和基于数字类型(DATETIME)将会转换成可变长度值;
    --CHAR和NCHAR会转换成可变长度存储;
    页压缩
    --前缀压缩:前缀为aabbcc,对应值aabbccdd则替换为6dd;
    --字典压缩:搜索页面上任意位置的重复值,不局限于一列;

    行压缩:ALTER TABLE TestCompression REBUILD WITH (DATA_COMPRESSION=ROW)
    页压缩:ALTER TABLE TestCompression REBUILD WITH (DATA_COMPRESSION=PAGE)


    如果有大量重复值或重复前缀,建议使用字典前缀表;
    经常执行删除操作的表容易造成页密度调整,增加from面积,建议定期执行数据压缩,然后执行索引重建。

  • 相关阅读:
    全新 D 系列虚拟机型号
    D 系列性能预期
    Azure Backup 入门
    对 Azure Backup 的常见配置问题进行故障排除
    宣布发布长期保留 Azure Backup功能
    宣布 Azure Backup 支持备份 Windows Server 2008
    Azure Backup 简介
    MongoDB中ObjectId的误区,以及引起的一系列问题
    UNIX/Linux_C_程序员需要掌握的七种武器
    Docker企业版安装指南
  • 原文地址:https://www.cnblogs.com/an-baobao/p/12362717.html
Copyright © 2011-2022 走看看