SQLServer2014数据库的优化器
当前位置:以往代写 > 数据库教程 >SQLServer2014数据库的优化器
2019-06-14

SQLServer2014数据库的优化器

SQLServer2014数据库的优化器

  列操作WHERE子句中列旁边的任何操作都将导致SQLServer2014用表扫描来完成查询。优化器会用一个建立在name上的索引来进行查,从而提高速度。此外,用户在日常查询中应尽量少用HAVING子句。HAVING子句实现数据过滤准其功能与WHERE子句类似。

SQLServer2014数据库的优化器_MySQL私房菜_sql_SQL2005_课课家

  然而,在数据库实际操作中,尤其是针对大数据量的表或视图进行SELECT操作时,应尽可能地避免使用HAVING子句。这是因为HAVING子句只会在检索出所有记录之后才对结果集进行过滤,这个处理需要排序、总计等操作,如果能通过WHERE子句限制记录的数目,就能减少这方面的开销。

  事实上,含HAVING子句句的SELECT语句是在过滤数据之前执行COUNT或者SUM统计操作,其操作针对目标表的所有记录;而含WHERE子句的SELECT语句是在过滤数据之后执行COUNT或者SUM统计操作,其操作针对过滤后的记录,操作对象必然更少,其执行效率更高。因此,在能够用用WHERE子句替代HAVING子句的情况下,用户尽量避免使用HAVING子句,而是用WHERE子句代替。

  避免使用DISTINCT使用DISTINCT是为了保证在结果集中不出现重复值,但是DISTINCI关键子会产生张工作表,并进行排序以删除重复记录,这会大大增加查询时间和1O的次数。因此应尽量免使用DISTINCT例如,不使用DISTINCT关键字,用户也可以通过如下语句从employee表中找出重复的idSELECTIdFROMemployeeGROUPBYidHAVINGCOUNT(1d)>11在实际使用中,DISTINCT关键字往往只用用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。对于记录行超过1万以上的大数据表来说,使用DISTINCT关键字会明显延长SELECT语句的执行时间。

  这是因为DISTINCT用二重循环查淘来实现消除重复记录,这就需要对数据表中的每行记录都进行比较,对于一个数据量非常大的表或视图来说,这样做无疑是会直接影响到数据库性能的。是不消除重复记录可以通过子查询、GROUPBY等其他方式实现。对于大数据表来说,用户尽量避免使用DISTINCT关键字。

  存储过程存储过程是分析和编译后的SQL程序,可以包含巨大而复杂的查询或SQL操作,经过编译后存储在sql数据库中,客户应用程序通过引用其名称进行调用。存储过程在第一次执行时建立优化的查询方案,SQLServer将查询方案保存在高速缓存中,在接下来的运行中就可以直接从高速缓存执行。省去了优化和编译阶段,从而节省了执行所需的时间。

  小编结语:最优的查询方案,往往要根据实际的要求和具体情况,通过比较进行选择。SQLServer提供的showplan可以对不同的查询结构的性能进行比较,包括查询计划、索引选择、IO次数、响应时间等。在开发过程中,可以使用这一有力工具。优化TSQL查询根本的原则是减少索引表的次数、避免非常复杂的逻辑、合理设计查询子句。

    关键字:

在线提交作业