评价过滤运算符选择对T-SQL执行性能的影响机制

豆豆网   技术应用频道   2008年01月16日  【字号: 收藏本文

内容摘要:关于T-SQL过滤运算符的流行经验法则确实不少,但却不能够尽信,相反我们应该对自己的选择做出确切的评价。

  这个单位值越高代表该查询执行的开销越大。在本例中,等于和IN运算符执行计划中所有操作步骤的I/O开销为0.915718单位,而ANY和 EXISTS运算符中所有操作步骤的I/O开销为0.0101157单位。

  注意,ANY和 EXISTS运算符在其参数中包含了等于比较运算符,正是这些运算符的使用最终影响了该查询的性能。在本例中,在SalesOrderDetail 表上直接使用等于运算符,与间接地在Products表上将等于运算符作为ANY 和EXISTS逻辑运算符的参数使用相比,前者的I/O开销更高。

  CPU的预计开销

  在本例中,等于和IN运算符执行计划中所有操作步骤的CPU开销为0.133606单位,而ANY和 EXISTS执行计划中所有操作步骤的CPU开销为0.0078319单位。同样的,这个单位值越高代表该查询执行的开销越大。

  查询优化器和子树的预计开销

  查询优化器的预计开销非常有用,主要用于在确定查询调优时需要特别注意的步骤。调优策略不是本文的讨论重点,所以我们只要看个操作步骤的开销。在查询优化器预计开销中括号内显示的百分比值是针对整个执行计划而言的。高百分比值不一定表示高开销;不过,如果查询性能很低,那首先要回查这些高百分比值的项,因为它们对性能的影响最大。

  子树开销代表了正在执行的步骤对查询优化器的总体开销。同样的,这个值越高,表示执行性能的代价越大。

  等于和IN运算符执行计划中所有步骤的子树总开销为1.04932单位,而ANY和 EXISTS执行计划中所有步骤的子树总开销为1.166191单位。

  综合评价

  在本例的数据库环境下,对接受评价的特定查询来说,等于和IN运算符的总体性能要比ANY和EXISTS运算符符的更佳。尽管I/O和CPU花销的数值呈现了相反的趋势,不过由于查询优化器的子树开销扭转了局面,所以前者的性能优势很明显。

  在本例的情况下,我们的最优选项可以排除掉ANY 和EXISTS运算符;不过,最终是选择等于比较运算符还是IN逻辑运算符,就得看个人的喜好,或者从将来应用方面来考虑。

  为最佳查询运算符选择做出更可靠的决策,需要考虑的关键问题包括索引对查询性能的影响、对整个执行计划的评价,以及执行查询的数据库环境。这样的评价结果可能会证明我们一般使用的经验法则是对的(当然,也可能证明它们是错的),不过对于确定能带来最佳查询性能的运算符还是有很大帮助的。

来源:IT专家网    作者:cyw    责编:豆豆技术应用

正在加载评论...