首页 > 数据库技术 > 详细

SQL查询性能优化

时间:2016-02-23 18:32:56      阅读:143      评论:0      收藏:0      [点我收藏+]

一:索引设计建议

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

 

SQL查询性能优化

原文:http://www.cnblogs.com/liurui/p/5210730.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!