优化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
原文地址:https://www.cnblogs.com/xiangniu/p/1982178.html