• 优化SQL SERVER访问性能


    ①:

     情况  优化方法
     子查询返回的值与外部查询的每行相同  在查询之前,声明一个变量,然后选择需要的值赋给这个变量。这样查询只执行一次,而不是在外部表的每个记录都执行一次。
     两个表都相对较小(比如说不超过一万个记录)  使用子查询。
     在考虑所有标准以后,匹配只会返回一个值  子查询
     在考虑所有查询后,匹配只返回很少的值,在查询列中没有没有索引  子查询。单个的查表或者查表几次的开销通常比连接的开销少
     查询的表相对很小,但是基表很大 大部分情况下选择连接。 
    如果可能的话使用嵌套查询,其次是连接,最后是互相关联的子查询。
    子查询只查表一次,而采用相互关联的子查询时,需要循环查表多次。
     相互关联的子查询与连接相比  选择连接。
    相互关联的子查询比指针更快,但是比其他的可选方案都慢
     派生表和其他可选方案  派生表通常需要很大的开销,派生表运行一次,然后驻留内存,打部分开销用于初始创建,且没有索引。可能很快也可能很慢,视情况而定。
     EXISTS 和其他可选方案  选择 EXISTS 。
    例外:派生表的速度是比使用 EXISTS 快一倍,但是其初始化的开销很大

       

    ②:使用派生数据。比如使用计算列,因为读入 WHERE totalPrice > $100 的查询比 WHERE qty*unitPrice>50 的查询快得多,特别是可以索引计算得到 totalPrice 时。
    ③:在何处以及何时使用何种索引:
    1。索引,特别是 非群集索引 ,主要在索引内有合理的选择性的情况下是有益的。某列中唯一值所占的百分比越高,越应该选择此列建立索引,且由此建立的索引的益处越大。
    2。索引在读取数据时刻提高性能,但是在修改数据时(插、删、改),其开销很大。
    3.群集索引。当使用范围查询比较频繁时,群集索引是最好的方法。比如使用较多的 BETWEEN、OR、GROUP BY、MAX、MIN、COUNT等。当想要数据基于 群集键 使用 “ORDER BY” 时,效率也很高。
    PS:另一篇关于数据库访问性能优化的文章:http://blog.csdn.net/yzsind/archive/2010/12/06/6059209.aspx
  • 相关阅读:
    codevs 2602 最短路径问题x
    codevs 1077 多源最短路x
    2010TianjinRegional 部分题解
    [CF706D]Vasiliy's Multiset(异或字典树)
    [CF710E]Generate a String(DP)
    [CF710C]Magic Odd Square(构造)
    [CF151B]Phone Numbers(暴力,模拟)
    [POJ2104]K-th Number(主席树,静态区间k小)
    [CF707D]Persistent Bookcase(离线,DFS)
    [CF707C]Pythagorean Triples(数学)
  • 原文地址:https://www.cnblogs.com/xiangniu/p/1982178.html
Copyright © 2020-2023  润新知