SQLSERVER是怎麽通过索引和统计信息来找到目标数据的(第三篇)

最近真的没有什么精力写文章,天天加班,为了完成这个系列,硬着头皮上了

再看这篇文章之前请大家先看我之前写的第一篇和第二篇

第一篇:SQLSERVER是怎麽通过索引和统计信息来找到目标数据的(第一篇)

第二篇:SQLSERVER是怎麽通过索引和统计信息来找到目标数据的(第二篇)

1、统计信息的含义与作用

为了以尽可能快的速度完成语句,光有索引是不够的。对于同一句话,SQLSERVER有很多种方法来完成他。

有些方法适合于数据量比较小的时候,有些方法适合于数据量比较大的时候。同一种方法,在数据量不同的时候,

复杂度会有非常大的差别。索引只能帮助SQLSERVER找到符合条件的记录。SQLSERVER还需要知道每一种操作

所要处理的数据量有多少,从而估算出复杂度,选取一个代价最小的执行计划。说得通俗一点,SQLSERVER要能够

知道数据是“长得什么样”的才能用最快方法完成指令

SQLSERVER不像人,光看看数据就能够大概心理有数。那么怎麽能让SQL知道数据的分布信息呢?

在数据库管理系统里有个常用的技术,就是数据“统计信息(statistics)”

SQLSERVER就是通过他了解数据的分布情况的

下面可以先来看前两篇文章的两张范例表在SalesOrderID这个字段上的统计信息,以便对这个概念有点直观认识

dbo.SalesOrderHeader_test保存的是每张订单的概要信息,一张订单只会有一条记录

所以SalesOrderID是不会重复的。现在这张表里,应该有31474条记录。SalesOrderID是一个int型的字段,

所以字段长度是4。

运行

  1. 1 DBCC SHOW_STATISTICS(tablename,INDEX OR STATISTICS name)
  2. 2
  3. 3 DBCC SHOW_STATISTICS([SalesOrderHeader_test],SalesOrderHeader_test_CL)

统计信息内容分3部分

1、统计信息头信息

列名                              说明

name                     统计信息的名称,这里就是索引的名字

updated                  上一次更新统计信息的日期和时间。这里是12 18 2012  1:16AM                                    这个时间非常重要,根据他能够判断统计信息是什么时候更新的                                    是不是在数据量发生变化之后,是不是存在统计信息不能反映当前                                    数据分布特点的问题

rows                     表中的行数。这里是31465行,不能完全完全正确地反映了当前表里数据量(因为统计信息没有及时更新)

rows sampled             统计信息的抽样行数这里也是31465,说明上次SQL更新统计信息                                    的时候,对整个表里所有记录的SalesOrderID字段,都扫描了一遍                                   ,这样做出来的统计信息一般都是很精确的

steps                    在统计信息的第三部分,会把数据分成几组,这里是3组

density                  第一个列前缀的选择性(不包括EQ_ROWS)

average key length       所有列的平均长度,因为SalesOrderHeader_test_CL索引只有一列数据类型是int,

所以长度是4(单位是字节),如果索引有多个列,每个列的数据类型都不一样,

比如再有一个列colc char(10) 那么平均长度是(10+4)/2=7

string index             如果为“是”,则统计信息中包含字符串摘要索引,以支持为LIKE条件                                    估算结果集大小。仅适用于char,varchar,nchar和nvarchar,varchar(max)                                    nvarchar(max),text,ntext 数据类型的前导列。这里是int,所以这个值是“NO”

2、数据字段的选择性            列名                                说明

all density                反映索引列的选择性(selectivity)                               "选择性"反映数据集里重复的数据量是多少,或者反过来说,值唯一的数据量                               有多少。如果一个字段的数据很少有重复,那么他的可选择性就比较高。比如                               身份证号,是不可重复的。哪怕对整个中国的身份记录做查询,代入一个身份证号码                               最多只会有一条记录返回,在这样的字段上的过滤条件,能够有效地过滤掉大量数据                               返回的结果集会比较小                               举个相反的例子:性别。所有人只有两种,非男即女。这个字段上的重复性就很高                               选择性就很低。一个过滤条件,最多只能过滤掉一半的记录                               SQL通过计算“选择性”,使得自己能够预测一个过滤条件做完后,大概能有多少记录                               返回 Density的定义是: density = 1/cardinality of index keys                               如果这个值小于0.1,一般讲这个索引的选择性比较高,如果大于0.1,他的选择性                               就不高了。这里[SalesOrderHeader_test]有31474条没有重复的记录                               1/31474 = 3.177e-5 这个字段的选择性是不错的

average length        索引列的平均长度,这里还是4

columns                 索引列的名称,这里是字段名 SalesOrderID

从这一部分的信息,可以推断出统计信息所关心的字段的长度,以及他有多少条唯一值。但是这些信息对SQLSERVER预测结果集复杂度还不够。

比如我现在要查一个SalesOrderID=60000的订单,还是不知道会有多少记录返回。这里需要第三部分的信息

3、直方图(histogram)          列名                                   说明      range_hi_key                直方图里每一组(step)数据的最大值                                         订单号的最小号码在表格里是43659,这里SQL选择他作为第一个step                                         的最大值,3组数据分别是 ~43659  43660~75131   75132~75132

range_rows                  直方图里每组数据区间行数,上限值除外 第一组只有一个数:43659                                         第三组也只有一个数:75132,其他数据都在第二组里,区间里有31471个数

EQ_ROWS                   表中值与直方图每组数据上限值相等的行数目 这里都是1

distinct_range_rows           直方图里每组数据区间非重复值的数目,上限值除外由于这个字段没有重复值,所以这里 就等于range_rows的值

avg_range_rows              直方图里每组数据区间内重复值的平均数目,上限值除外。计算公式                                       (range_rows/distinct_range_rows for distinct_range_rows>0)                                       这里distinct_range_rows的值就等于range_rows的值,所以avg_range_rows等于1

有这麽一个直方图,就能够很好地知道表格里的数据分布了。在SalesOrderID这个字段里,最小值是43659,

最大值是75132,在这个区间里有31473个值,而且没有重复值,所以可以推算出表里的值就是从43659开始到75132结束的每个int值。

SQL没有必要存储很多step的信息,只要这3个step,就能够完全表达数据分布

这里要说明两点的是:

(1)如果一个统计信息是为一组字段建立的,例如一个复合索引建立在两个以上的字段上,SQLSERVER维护所有字段的选择性信息,

但是只会维护第一个字段的直方图。因为第一个字段的行数就是整张表的行数,就算那个字段在某条记录里为null,SQLSERVER也会做统计

(2)当表格比较大的时候,SQLSERVER在更新统计信息的时候为了降低消耗,只会取表格的一部分数据做抽样(rows sample),

这时候统计信息里面的数据都是根据这些抽样数据估算出来的值可能和真实值会有些差异

统计信息越细致,当然会越精确,但是维护统计信息要付出的额外开销也就越大。有可能提高统计信息精确度所带来的执行性能的提升

还抵消不了维护统计信息成本的增加。 SQLSERVER做这样的设计,不是因为其能力有限,而是为了谋求一个对大多数情况都合适的平衡

-------------------------------------------统计信息的维护和更新---------------------------------

当SQLSERVER需要去估算某个操作的复杂度时,他必定要试图去寻找相应的统计信息做支持。

DBA无法预估SQLSERVER会运行什么样的操作,所以也无法预估SQLSERVER可能需要什么样的统计信息

如果靠人力来建立和维护统计信息,那将是一个非常复杂的工程。好在SQLSERVER不是这样设计的

在绝大多数情况下,SQLSERVER自己会很好地维护和更新统计信息,用户基本没有感觉,DBA也没有额外的负担。

这主要是因为在SQLSERVER 数据库属性里,有两个默认打开的设置

auto create statistics 自动创建统计信息

auto update statistics自动更新统计信息

他们能够让SQLSERVER在需要的时候自动建立要用到的统计信息,也能在发现统计信息过时的时候,自动去更新他

SQLSERVER会在什么情形下创建统计信息呢?

主要有3种情况

(1)在索引创建时,SQLSERVER会自动在索引所在的列上创建统计信息,所以从某种角度讲,索引的作用是双重的,

他自己能够帮助SQLSERVER快速找到数据,而他上面的统计信息,也能够告诉SQLSERVER数据的分布情况

补充一下:索引重建的时候也会更新表的统计信息,所以有时候查询变慢的时候重建一下索引查询变快了统计信息的更新也是原因之一

(2)DBA也可以通过之类的语句手动创建他认为需要的统计信息 CREATE STATISTICS

如果打开了auto create statistics自动创建统计信息,一般来讲很少需要手动创建

(3)当SQSERVERL想要使用某些列上的统计信息,发现没有的时候,“auto create statistics 自动创建统计信息”

会让SQLSERVER自动创建统计信息

例如,当语句要在某个(或者几个)字段上做过滤,或者要拿他们和另外一张表做联接(join) SQLSERVER要估算最后从这张表会返回多少记录。

这时候就需要一个统计信息的支持。如果没有,SQLSERVER会自动创建一个

在打开“auto create statistics 自动创建统计信息”的数据库上,一般不需要担心SQLSERVER没有足够的统计信息来选择执行计划。

这一点完全交给SQLSERVER管理就可以了

更新统计信息

SQLSERVER不仅要建立合适的统计信息,还要及时更新他们,使他们能够反映表格里数据的变化数据的插入、删除、修改都可能会引起统计信息的更新。

但是,更新统计信息本身也是一件消耗资源的事情,尤其是对比较大的表格。如果有一点点小的修改SQLSERVR都要去更新统计信息,

可能SQLSERVER就得光忙活这个,来不及做其他事情了。SQLSERVER还是要在统计信息的准确度和资源合理消耗之间做一个平衡。

在SQL2005/SQL2008,触发统计信息自动更新的条件是:

(1)如果统计信息是定义在普通表格上,那么当发生下面变化之一后,统计信息就被认为是过时的了。下次使用到时,会自动触发一个更新动作

分离数据库的时候,也可以手动选择是否更新统计信息

1、表格从没有数据变成有大于等于1条数据

2、对于数据量小于500行的表格,当统计信息的第一个字段数据累计变化量大于500以后

3、对于数据量大于500行的表格,当统计信息的第一个字段数据累计变化量大于 --500+(20%*表格数据总量)以后。所以对于比较大的表,

只有1/5以上的数据发生变化后 --SQL才会去重算统计信息

(2)临时表(temp table)上可以有统计信息。其维护策略基本和普通表一致。 但是表变量(table variable)上不能建立统计信息

这样的维护策略能够保证花费比较小的代价,确保统计信息基本正确

SQL2000和SQL2005在更新统计信息的策略上的区别:

在SQLSERVER2000的时候,如果SQLSERVR在编译一个语句时发现某个表的某个统计信息已经过时,

他会暂停语句的编译,转去更新统计信息,等统计信息更新好以后,用新的信息来做执行计划。这样的方法

当然能够帮助得到一个更准确的执行计划,但是缺点是语句执行要等统计信息更新完毕。这个过程有点费时。

在大部分情况下,语句执行效率对统计信息没有那么敏感。如果用老的统计信息也能做出比较好的执行计划,

这里的等待就白等了

所以在SQLSERVER2005以后,数据库属性多了一个“auto update statistics asynchronously自动异步更新统计信息”

当SQLSERVER发现某个统计信息过时时,他会用老的统计信息继续现在的查询编译,但是会在后台启动一个任务,更新这个统计信息。

这样下一次统计信息被使用到时,就已经是一个更新过的版本。这样做的缺点是,不能保证当前这句查询的执行计划准确性。

凡事有利有弊,DBA可以根据实际情况做选择

写完了,可能篇幅很长,不过没有办法,大部分内容都是首尾呼应,没有前面的铺垫可能看不懂下面的内容

 

--------------------------------------------------------------------------

2013-8-25 补充:

如果需要更新某张表的统计信息,使用下面的SQL语句

  1. 1 USE [pratice] --需要更新统计信息的数据库
  2. 2 GO
  3. 3
  4. 4 UPDATE STATISTICS tableA
  5. 5 GO

如果需要更新整个数据库的统计信息,使用下面的SQL语句,不带参数

  1. 1 USE [pratice] --需要更新统计信息的数据库
  2. 2 GO
  3. 3 EXEC [sys].[sp_updatestats] --@resample = '' -- char(8)
  4. 4 GO
  1. 1 正在更新 [dbo].[testpivot]
  2. 2 [_WA_Sys_00000001_0425A276],不需要更新...
  3. 3 [_WA_Sys_00000002_0425A276],不需要更新...
  4. 4 已更新 0 条索引/统计信息,2 不需要更新。
  5. 5
  6. 6 正在更新 [dbo].[Users]
  7. 7 [IX_UserID],不需要更新...
  8. 8 [_WA_Sys_00000002_08EA5793],不需要更新...
  9. 9 [_WA_Sys_00000003_08EA5793],不需要更新...
  10. 10 [_WA_Sys_00000004_08EA5793],不需要更新...
  11. 11 [_WA_Sys_00000005_08EA5793],不需要更新...
  12. 12 已更新 0 条索引/统计信息,5 不需要更新。
  13. 13
  14. 14 正在更新 [dbo].[TABLE1]
  15. 15 [INDEX_ID],不需要更新...
  16. 16 [INDEX_CATEGORYID],不需要更新...
  17. 17 已更新 0 条索引/统计信息,2 不需要更新。
  18. 18
  19. 19 正在更新 [dbo].[TABLE2]
  20. 20 [INDEX_CATEGORYID],不需要更新...
  21. 21 已更新 0 条索引/统计信息,1 不需要更新。
  22. 22
  23. 23 正在更新 [dbo].[Orders]
  24. 24 [_WA_Sys_00000005_0EA330E9],不需要更新...
  25. 25 已更新 0 条索引/统计信息,1 不需要更新。
  26. 26
  27. 27 正在更新 [dbo].[Department]
  28. 28 [CL_DepartmentID],不需要更新...
  29. 29 已更新 0 条索引/统计信息,1 不需要更新。
  30. 30
  31. 31 正在更新 [dbo].[UserInfo]
  32. 32 已更新 0 条索引/统计信息,0 不需要更新。
  33. 33
  34. 34 正在更新 [dbo].[tb_test]
  35. 35 已更新 0 条索引/统计信息,0 不需要更新。
  36. 36
  37. 37 正在更新 [dbo].[Department9]
  38. 38 [NCL_Name_GroupName],不需要更新...
  39. 39 已更新 0 条索引/统计信息,1 不需要更新。
  40. 40
  41. 41 正在更新 [dbo].[bulkinserttest]
  42. 42 已更新 0 条索引/统计信息,0 不需要更新。
  43. 43
  44. 44 正在更新 [dbo].[SystemPara]
  45. 45 [_WA_Sys_00000001_173876EA],不需要更新...
  46. 46 [_WA_Sys_00000002_173876EA],不需要更新...
  47. 47 [_WA_Sys_00000004_173876EA],不需要更新...
  48. 48 已更新 0 条索引/统计信息,3 不需要更新。
  49. 49
  50. 50 正在更新 [dbo].[TB]
  51. 51 [_WA_Sys_00000001_178D7CA5],不需要更新...
  52. 52 [_WA_Sys_00000002_178D7CA5],不需要更新...
  53. 53 [_WA_Sys_00000003_178D7CA5],不需要更新...
  54. 54 已更新 0 条索引/统计信息,3 不需要更新。
  55. 55
  56. 56 正在更新 [dbo].[SQLTRACESAMPLE]
  57. 57 已更新 0 条索引/统计信息,0 不需要更新。
  58. 58
  59. 59 正在更新 [dbo].[HeapTable]
  60. 60 [_WA_Sys_00000001_1A69E950],不需要更新...
  61. 61 已更新 0 条索引/统计信息,1 不需要更新。
  62. 62
  63. 63 正在更新 [dbo].[testcolumn]
  64. 64 已更新 0 条索引/统计信息,0 不需要更新。
  65. 65
  66. 66 正在更新 [dbo].[encrypttb_demo]
  67. 67 已更新 0 条索引/统计信息,0 不需要更新。
  68. 68
  69. 69 正在更新 [dbo].[ClusteredTable]
  70. 70 [CIX],不需要更新...
  71. 71 已更新 0 条索引/统计信息,1 不需要更新。
  72. 72
  73. 73 正在更新 [dbo].[test23]
  74. 74 已更新 0 条索引/统计信息,0 不需要更新。
  75. 75
  76. 76 正在更新 [dbo].[Table_1]
  77. 77 [_WA_Sys_00000002_2022C2A6],不需要更新...
  78. 78 [_WA_Sys_00000001_2022C2A6],不需要更新...
  79. 79 已更新 0 条索引/统计信息,2 不需要更新。
  80. 80
  81. 81 正在更新 [dbo].[Department10]
  82. 82 [NCL_Name_GroupName],不需要更新...
  83. 83 [_WA_Sys_00000003_2116E6DF],不需要更新...
  84. 84 已更新 0 条索引/统计信息,2 不需要更新。
  85. 85
  86. 86 正在更新 [dbo].[BankUser]
  87. 87 [PK__BankUser__236943A5],不需要更新...
  88. 88 已更新 0 条索引/统计信息,1 不需要更新。
  89. 89
  90. 90 正在更新 [dbo].[PWDQuestion]
  91. 91 [PK__PWDQuestion__2645B050],不需要更新...
  92. 92 已更新 0 条索引/统计信息,1 不需要更新。
  93. 93
  94. 94 正在更新 [dbo].[fulltext_test]
  95. 95 [UQ__fulltext_test__28B808A7],不需要更新...
  96. 96 [IX_ID],不需要更新...
  97. 97 已更新 0 条索引/统计信息,2 不需要更新。
  98. 98
  99. 99 正在更新 [dbo].[tabelcheckindent]
  100. 100 [PK_tabelcheckindent],不需要更新...
  101. 101 已更新 0 条索引/统计信息,1 不需要更新。
  102. 102
  103. 103 正在更新 [dbo].[SecretInfo]
  104. 104 已更新 0 条索引/统计信息,0 不需要更新。
  105. 105
  106. 106 正在更新 [dbo].[Insert_Test]
  107. 107 [_WA_Sys_00000001_2A164134],不需要更新...
  108. 108 已更新 0 条索引/统计信息,1 不需要更新。
  109. 109
  110. 110 正在更新 [dbo].[TestInsert]
  111. 111 [PK__TestInsert__2B3F6F97],不需要更新...
  112. 112 已更新 0 条索引/统计信息,1 不需要更新。
  113. 113
  114. 114 正在更新 [dbo].[RowToColumn]
  115. 115 [_WA_Sys_00000001_2C3393D0],不需要更新...
  116. 116 [_WA_Sys_00000002_2C3393D0],不需要更新...
  117. 117 [_WA_Sys_00000003_2C3393D0],不需要更新...
  118. 118 [_WA_Sys_00000004_2C3393D0],不需要更新...
  119. 119 [_WA_Sys_00000005_2C3393D0],不需要更新...
  120. 120 [_WA_Sys_00000006_2C3393D0],不需要更新...
  121. 121 [_WA_Sys_00000007_2C3393D0],不需要更新...
  122. 122 [_WA_Sys_00000008_2C3393D0],不需要更新...
  123. 123 已更新 0 条索引/统计信息,8 不需要更新。
  124. 124
  125. 125 正在更新 [dbo].[Insert_Test2]
  126. 126 [PK__Insert_Test2__2DE6D218],不需要更新...
  127. 127 已更新 0 条索引/统计信息,1 不需要更新。
  128. 128
  129. 129 正在更新 [dbo].[pagediff]
  130. 130 已更新 0 条索引/统计信息,0 不需要更新。
  131. 131
  132. 132 正在更新 [dbo].[DP_OilCanOption]
  133. 133 [_WA_Sys_00000001_31EC6D26],不需要更新...
  134. 134 [_WA_Sys_00000002_31EC6D26],不需要更新...
  135. 135 已更新 0 条索引/统计信息,2 不需要更新。
  136. 136
  137. 137 正在更新 [dbo].[DBCCResult]
  138. 138 [_WA_Sys_00000002_32767D0B],不需要更新...
  139. 139 [_WA_Sys_0000000A_32767D0B],不需要更新...
  140. 140 已更新 0 条索引/统计信息,2 不需要更新。
  141. 141
  142. 142 正在更新 [sys].[fulltext_catalog_freelist_16]
  143. 143 [docid],不需要更新...
  144. 144 已更新 0 条索引/统计信息,1 不需要更新。
  145. 145
  146. 146 正在更新 [sys].[fulltext_index_map_667149422]
  147. 147 [i1],不需要更新...
  148. 148 [i2],不需要更新...
  149. 149 [i3],不需要更新...
  150. 150 [i4],不需要更新...
  151. 151 已更新 0 条索引/统计信息,4 不需要更新。
  152. 152
  153. 153 正在更新 [dbo].[计算列]
  154. 154 已更新 0 条索引/统计信息,0 不需要更新。
  155. 155
  156. 156 正在更新 [dbo].[LobTestTable]
  157. 157 [_WA_Sys_00000003_351DDF8C],不需要更新...
  158. 158 已更新 0 条索引/统计信息,1 不需要更新。
  159. 159
  160. 160 正在更新 [dbo].[LobIndexTestTable]
  161. 161 [IX_LobIndexTestTable],不需要更新...
  162. 162 [IX_LobCIndexTestTable],不需要更新...
  163. 163 已更新 0 条索引/统计信息,2 不需要更新。
  164. 164
  165. 165 正在更新 [dbo].[Department3]
  166. 166 [CL_DepartmentID],不需要更新...
  167. 167 已更新 0 条索引/统计信息,1 不需要更新。
  168. 168
  169. 169 正在更新 [dbo].[LobCIndexTestTable]
  170. 170 [IX_LobCIndexTestTable],不需要更新...
  171. 171 已更新 0 条索引/统计信息,1 不需要更新。
  172. 172
  173. 173 正在更新 [dbo].[Department4]
  174. 174 [PK_Department4_1],不需要更新...
  175. 175 [_WA_Sys_00000002_3A179ED3],不需要更新...
  176. 176 已更新 0 条索引/统计信息,2 不需要更新。
  177. 177
  178. 178 正在更新 [dbo].[testheap2013119]
  179. 179 已更新 0 条索引/统计信息,0 不需要更新。
  180. 180
  181. 181 正在更新 [dbo].[Department5]
  182. 182 [CL_Company],不需要更新...
  183. 183 [_WA_Sys_00000002_3CF40B7E],不需要更新...
  184. 184 [_WA_Sys_00000001_3CF40B7E],不需要更新...
  185. 185 已更新 0 条索引/统计信息,3 不需要更新。
  186. 186
  187. 187 正在更新 [dbo].[TESTkeylock]
  188. 188 [PK_TEST11],不需要更新...
  189. 189 已更新 0 条索引/统计信息,1 不需要更新。
  190. 190
  191. 191 正在更新 [dbo].[Department6]
  192. 192 [PK_Department6_1],不需要更新...
  193. 193 已更新 0 条索引/统计信息,1 不需要更新。
  194. 194
  195. 195 正在更新 [dbo].[ChangeAttempt]
  196. 196 已更新 0 条索引/统计信息,0 不需要更新。
  197. 197
  198. 198 正在更新 [dbo].[Department2]
  199. 199 [PK__Department2__467D75B8],不需要更新...
  200. 200 [_WA_Sys_00000003_4589517F],不需要更新...
  201. 201 已更新 0 条索引/统计信息,2 不需要更新。
  202. 202
  203. 203 正在更新 [dbo].[tempPKNCL]
  204. 204 [PK__tempPKNCL__46E78A0C],不需要更新...
  205. 205 已更新 0 条索引/统计信息,1 不需要更新。
  206. 206
  207. 207 正在更新 [dbo].[test_index]
  208. 208 [PK__test_index__489AC854],不需要更新...
  209. 209 已更新 0 条索引/统计信息,1 不需要更新。
  210. 210
  211. 211 正在更新 [dbo].[ddl_log]
  212. 212 [_WA_Sys_00000002_48CFD27E],不需要更新...
  213. 213 [_WA_Sys_00000003_48CFD27E],不需要更新...
  214. 214 [_WA_Sys_00000004_48CFD27E],不需要更新...
  215. 215 [_WA_Sys_00000005_48CFD27E],不需要更新...
  216. 216 已更新 0 条索引/统计信息,4 不需要更新。
  217. 217
  218. 218 正在更新 [dbo].[Tmp_testComputeColumn]
  219. 219 已更新 0 条索引/统计信息,0 不需要更新。
  220. 220
  221. 221 正在更新 [dbo].[test1]
  222. 222 [PK_test1],不需要更新...
  223. 223 已更新 0 条索引/统计信息,1 不需要更新。
  224. 224
  225. 225 正在更新 [dbo].[test13]
  226. 226 [pk],不需要更新...
  227. 227 已更新 0 条索引/统计信息,1 不需要更新。
  228. 228
  229. 229 正在更新 [dbo].[Department8]
  230. 230 [NCL_Name_GroupName],不需要更新...
  231. 231 [_WA_Sys_00000001_52E34C9D],不需要更新...
  232. 232 [_WA_Sys_00000003_52E34C9D],不需要更新...
  233. 233 已更新 0 条索引/统计信息,3 不需要更新。
  234. 234
  235. 235 正在更新 [dbo].[Department12]
  236. 236 [PK__Department12__7167D3BD],不需要更新...
  237. 237 [NCL_Name_GroupName],不需要更新...
  238. 238 已更新 0 条索引/统计信息,2 不需要更新。
  239. 239
  240. 240 正在更新 [dbo].[CompareNonclusteredScan]
  241. 241 [_WA_Sys_00000003_73501C2F],不需要更新...
  242. 242 已更新 0 条索引/统计信息,1 不需要更新。
  243. 243
  244. 244 正在更新 [dbo].[Department13]
  245. 245 [PK__Department13__762C88DA],不需要更新...
  246. 246 [NCL_Name_GroupName],不需要更新...
  247. 247 [_WA_Sys_00000003_753864A1],不需要更新...
  248. 248 已更新 0 条索引/统计信息,3 不需要更新。
  249. 249
  250. 250 正在更新 [sys].[queue_messages_1977058079]
  251. 251 [queue_clustered_index],不需要更新...
  252. 252 [queue_secondary_index],不需要更新...
  253. 253 已更新 0 条索引/统计信息,2 不需要更新。
  254. 254
  255. 255 正在更新 [dbo].[Department11]
  256. 256 [PK__Department11__7908F585],不需要更新...
  257. 257 [NCL_Name_GroupName],不需要更新...
  258. 258 已更新 0 条索引/统计信息,2 不需要更新。
  259. 259
  260. 260 正在更新 [sys].[queue_messages_2009058193]
  261. 261 [queue_clustered_index],不需要更新...
  262. 262 [queue_secondary_index],不需要更新...
  263. 263 已更新 0 条索引/统计信息,2 不需要更新。
  264. 264
  265. 265 正在更新 [sys].[queue_messages_2041058307]
  266. 266 [queue_clustered_index],不需要更新...
  267. 267 [queue_secondary_index],不需要更新...
  268. 268 已更新 0 条索引/统计信息,2 不需要更新。
  269. 269
  270. 270 正在更新 [dbo].[Demo_AExportHeader]
  271. 271 已更新 0 条索引/统计信息,0 不需要更新。
  272. 272
  273. 273 正在更新 [dbo].[table_a]
  274. 274 [_WA_Sys_00000001_7B905C75],不需要更新...
  275. 275 已更新 0 条索引/统计信息,1 不需要更新。
  276. 276
  277. 277 正在更新 [dbo].[tableA]
  278. 278 [_WA_Sys_00000002_7E6CC920],不需要更新...
  279. 279 已更新 0 条索引/统计信息,1 不需要更新。
  280. 280
  281. 281 已更新了所有表的统计信息。

SQLSERVER是怎麽通过索引和统计信息来找到目标数据的(第三篇)的更多相关文章

  1. Sybase数据库收集表及其索引的统计信息

    更新表及其索引的统计信息: update table statistics 表名 go update index statistics 表名 go 建议此操作在闲时操作.

  2. SQLServer索引及统计信息

    索引除了提高性能,还能维护数据库. 索引是一种存储结构,主要以B-Tree形式存储信息. B-Tree的定义: 1.每个节点最多只有m个节点(m>=2) 2.除了根节点和叶子节点外的每个节点上最 ...

  3. 使用DBCC SHOW_STATISTICS展示索引的统计信息

    在开始之前搭建演示环境: USE master GO SET NOCOUNT ON --创建表结构 IF OBJECT_ID(N'ClassA', N'U') IS NOT NULL DROP TAB ...

  4. SQLServer查询当前数据库所有索引及统计,并使用游标批量删除

    --查询现有所有数据库表的索引情况 Select indexs.Tab_Name As [表名],indexs.Index_Name As [索引名] ,indexs.[Co_Names] As [索 ...

  5. 第十二章——SQLServer统计信息(1)——创建和更新统计信息

    原文:第十二章--SQLServer统计信息(1)--创建和更新统计信息 简介: 查询的统计信息: 目前为止,已经介绍了选择索引.维护索引.如果有合适的索引并实时更新统计信息,那么优化器会选择有用的索 ...

  6. sql server 索引阐述系列八 统计信息

    一.概述 sql server在快速查询值时只有索引还不够,还需要知道操作要处理的数据量有多少,从而估算出复杂度,选择一个代价小的执行计划,这样sql server就知道了数据的分布情况.索引的统计值 ...

  7. SQL Server 执行计划利用统计信息对数据行的预估原理二(为什么复合索引列顺序会影响到执行计划对数据行的预估)

    本文出处:http://www.cnblogs.com/wy123/p/6008477.html 关于统计信息对数据行数做预估,之前写过对非相关列(单独或者单独的索引列)进行预估时候的算法,参考这里. ...

  8. oracle重建、更新索引、索引统计信息命令

    在oracle中查找所有的表的索引的命令 select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_na ...

  9. MySQL索引统计信息更新相关的参数

    MySQL统计信息相关的参数: 1. innodb_stats_on_metadata(是否自动更新统计信息),MySQL 5.7中默认为关闭状态 仅在统计信息配置为非持久化的时候生效. 也就是说在i ...

随机推荐

  1. 提取html里面url()导入的图片正则表达式

    之前写过一次,后来无意发现还是有问题,比如 <a onclick="openZoosUrl('chatwin','param'); 这个click事件函数里面就有url()部分,造成了 ...

  2. HDU - 6113 2017百度之星初赛A 度度熊的01世界

    度度熊的01世界  Accepts: 967  Submissions: 3064  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 327 ...

  3. 阿里云(centos)下svn 服务器搭建

    安装说明 系统环境:阿里云centos安装方式:yum install subversion 检查已安装版本 #检查是否安装了低版本的SVN[root@localhost /]# rpm -qa su ...

  4. js原型和构造函数

    前言 从应用层面深入理解原型模式和js中的构造函数. 构造函数(constructor) js中的任何对象都有自己的构造函数.js中使用字面量声明的普通对象({})或数组([])等子对象本质上都是使用 ...

  5. Linux对外提供服务 网络操作 端口操作 1.开启服务监听端口 2.设置防火墙,放行访问端口的包 iptables&netfilter 四表五链和通堵策略

    主题: Linux服务器上软件提供服务 1.网络操作 2.端口操作 1.网络操作 本机必须能够ping通目标主机(本地虚拟机或者远程主机) 2.端口操作 1.开启服务监听端口 2.设置防火墙,放行访问 ...

  6. 4、CreateJS介绍-PreLoadJS

    需要在html5文件中引入的CreateJS库文件是preloadjs-0.4.1.min.js HTML5文件如下: <!DOCTYPE html> <html lang=&quo ...

  7. 【填坑】loj6159. 「美团 CodeM 初赛 Round A」最长树链

    水一水 枚举各个质数,把是这个数倍数的点留下,跑直径,没了 #include <bits/stdc++.h> using namespace std; int h,t,n,p,q,M,N; ...

  8. python的入门1(补发)

    一.python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为了在阿姆斯特丹打发时间,决心开发一个新的脚本解 ...

  9. Exploring refit, an automatic type-safe REST library for .NET Standard

    自动类型安全的.NET标准REST库refit   在SCOTT HANSELMAN 博客上看到一个好东西<Exploring refit, an automatic type-safe RES ...

  10. SpringBoot整合Redis使用Restful风格实现CRUD功能

    前言 本篇文章主要介绍的是SpringBoot整合Redis,使用Restful风格实现的CRUD功能. Redis 介绍 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-valu ...