色粉盒撒娇 发表于 2018-10-22 09:04:43

性能测试培训:sql server性能测试分析局部变量的性能影响2-10978776

  预估值和实际值差别更大,相当于查询优化器无法选择最适合的查询计划,因为错误的预估值。因为查询优化在执行时并不清楚局部变量值,导致无法使用统计直方图。
  不等式运算符的情况
  在我们的查询中使用的不等式运算符,因此查询优化器使用了一个简单的 30% 的算式来预估。
  Estimated Rows =(Total Rows * 30)/100 = (100000*30)/100 = 30000
  等式运算符的情况
  DECLARE @RequiredDate DATETIME
SET @RequiredDate = '2012-07-10 03:18:01.640' SELECT * FROM TempTableWHERE tempDateTime= @RequiredDate  如果在局部变量中使用等式运算符,那么查询优化器又会选择不同的公式,即 精确度 * 表记录总数. 执行下面查询可获取精确的值
  DBCC SHOW_STATISTICS('dbo.TempTable', IX_tempDateTime)
All Density = 0.0007358352 Total Number of Rows in Table = 100000  Estimated Rows = Density * Total Number =0.0007358352 *100000 = 73.5835

页: [1]
查看完整版本: 性能测试培训:sql server性能测试分析局部变量的性能影响2-10978776