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子句列上的函数。

  • 相关阅读:
    Uva 11401 数三角形
    Uva 11538 象棋中的皇后
    数学基础——基本计数方法
    八数码问题
    python 爬poj.org的题目
    python 爬图片
    hiho 第135周 九宫
    Uva 11464 偶数矩阵
    BZOJ 1001 [BeiJing2006]狼抓兔子
    LA 3708 墓地雕塑
  • 原文地址:https://www.cnblogs.com/liurui/p/5210730.html
Copyright © 2011-2022 走看看