zoukankan      html  css  js  c++  java
  • SQL查询性能优化

    一:索引设计建议

    检查WHERE子句和连接条件列;

    当一个查询提交到SQL Server时,查询优化器尝试为查询中引用的所有表查找最佳的数据访问机制。以下是它所进行的方式:

    1) 优化器识别WHERE子句和连接条件中所包含的列。

    2)  检查这些列上的索引。

    3) 优化器通过从索引维护的统计确定子句的选择性(也就是返回多少行)评估每个索引的有效性。

    4) 最终,优化器根据前面几个步骤中收集的信息,估计读取所限定的行开销最低的方法。

    使用窄索引;

    索引中的列尽量少。

    索引使用的数据类型大。

    原因是使索引变小,减少读取索引IO消耗,减少存储。

    检查列的唯一性;

    1) 在一个具有小范围的可能值的列(如性别)上创建索引对性能没有好处,因为查询优化器将不能使用索引有效地减少返回的行。

    2) 复合索引先使用最有选择性的列将使索引行的列更有效率。

    检查列的数据类型;

    考虑列顺序;

        复合类型列使用率大的列应在前面

    考虑索引类型;

    覆盖索引、索引交叉、过滤索引、索引视图、索引压缩。

    非聚焦索引会引起书签查找:可以使用覆盖、交叉索引方式解决

    二:碎片

     重新排列索引行和页面使物理和逻辑顺序相符来解决。外部碎片可以物理重排索引的叶子页面使其遵循索引的逻辑顺序。

     卸载并重建索引;使用DROP_EXISTING子句重建索引;在索引上执行ALTER INDEX REBUILD语句;在索引上执行ALTER INDEX REORGANIZE语句。

    填充因子技术。

    三:其它

     避免不可参数化的搜索条件。

      可参数化:包含条件=,>,>,=,<,<,=,between,like 'abcde%'

      不可参数化:排队条件<>,!=,not exists , not in , not like in ,or , like'%abcde' 

    注意like前面导字符的方式,前导字符越大越好。

     避免在WHERE子句上使用自述运算符。

     避免在WHERE子句列上的函数。

  • 相关阅读:
    input的button和submit的区别
    2016011993 顾思宇 散列函数的应用及其安全性
    结对项目作业报告——四则运算web项目
    读《构建之法》4、17章有感
    2016011993+小学四则运算练习软件项目报告
    读《构建之法》1、2、16章有感
    码出生活
    四则运算
    信息安全作业
    结对项目博客
  • 原文地址:https://www.cnblogs.com/liurui/p/5210730.html
Copyright © 2011-2022 走看看