数据库右键--〉察看--〉任务版--〉表信息
表下面有很多类型为索引的类似:_WA_Sys_DocBureauID_18227982的东西是什么?
我在查询分析器中f4搜索不到
整个数据库生成脚本(选择所有选项)页搜索不到
谁能告诉我他到底是什么?

解决方案 »

  1.   

    Sometimes sp_helpindex tablename returns entries like: (ex. _WA_Sys_test_status_6CD31A51) in addition to the user created indices. But these are not visible in enterprise manager when we check the indices for a particular table. These aren't indexes. It is system generated statistics over a non-indexed column. They are generated because you have the "Auto create statistics" option turned ON in the database property.(Or sp_dboption 'auto create statistics'). Generally these are harmless and its good to have them. But in case if you need to drop them use: DROP STATISTICS '_WA_Sys_test_status_6CD31A51'. More details can be had from the BooksOnLine topic 'Statistics'. Just to add on to the above example you can create a dummy table with say 1000 records without creating any indexexs. If you query for this table in the sysindexes table you willfind a single entry denoting it is a heap. Now access this table on some columns data as a range scan. You will find that SQL Server sees that this table doesn;t have indexes and hence would create such statistics for its internal purpose. 
      

  2.   

    统计信息
    Microsoft® SQL Server™ 2000 允许创建有关值在列中的分布情况的统计信息。该统计信息可供查询处理器用来确定最佳的查询评估策略。在创建索引时,SQL Server 会自动存储有关值在索引列中的分布情况的统计信息。SQL Server 中的查询优化器使用这些统计信息估算使用该索引进行查询的成本。另外,当 AUTO_CREATE_STATISTICS 数据库选项设置为 ON(默认值)时,SQL Server 自动为没有列索引用于谓词的列创建统计信息。 随着列中数据的更改,索引和列的统计信息可能会过时,导致查询优化器选择的查询处理方法不是最佳的。例如,如果创建一个包含一个索引列和 1,000 行数据的表,每一行在索引列中的值都是唯一的,则查询优化器将把该索引列视为搜集查询数据的好方法。如果更新列中的数据,因而有很多重复值,则该列对于查询不再是理想的候选列。然而,查询优化器仍然根据索引的过时分发统计信息(这些信息基于的是更新前的数据),将该列看作是一个好的候选列。说明  在使用 SQL 查询分析器以图形方式显示查询的执行计划时,过时或丢失的统计信息将予以警告显示(表名用红色文字显示)。有关更多信息,请参见使用 SQL 查询分析器以图形方式显示执行计划。另外,使用 SQL 事件探查器监视 Missing Column Statistics 事件类可以指示何时缺少统计信息。有关更多信息,请参见错误和警告事件分类。 
    因此,随着表中的数据发生变化,SQL Server 会自动定期更新这些统计信息。采样是在各个数据页上随机进行的,取自表或统计信息所需的列上的最小非聚集索引。从磁盘读取一个数据页后,该数据页上的所有行都被用来更新统计信息。统计信息更新的频率取决于列或索引中的数据量以及数据更改量。例如,对于一个包含 10,000 行的表,当 1,000 个索引值发生更改时,该表的统计信息便可能需要更新,因为 1,000 个值可能在该表中占有很大的比例。而对于包含 10,000,000 个索引条目的表来说,有 1,000 个索引值发生更改的意义要小得多,因此统计信息便可能不会自动更新。但是,SQL Server 总是确保至少对若干行进行采样;对小于 8 兆字节 (MB) 的表搜集统计信息时,总是进行完全扫描。通过进行数据采样而不是分析所有数据,可以极大地减少这种统计信息的自动更新所带来的成本。在某些情况下,统计采样无法获得表中数据的精确特征。可以使用 UPDATE STATISTICS 语句的 SAMPLE 和 FULLSCAN 子句,控制在逐个表手工更新统计信息时采样的数据量。FULLSCAN 子句指定搜集信息时扫描表中所有数据,而 SAMPLE 子句可用来指定采样的行数百分比或采样的行数。 也可以用下列方式告知 SQL Server 不必维护给定列或索引上的统计信息: 使用系统存储过程 sp_autostats。
    使用 CREATE INDEX 语句的 STATISTICS_NORECOMPUTE 子句。
    使用 UPDATE STATISTICS 语句的 NORECOMPUTE 子句。
    使用 CREATE STATISTICS 语句的 NORECOMPUTE 子句。
    使用 ALTER DATABASE 语句将 AUTO_CREATE_STATISTICS 和 AUTO_UPDATE_STATISTICS 数据库选项设置为 OFF。有关更多信息,请参见设置数据库选项。 
    如果通知 SQL Server 不要自动保留统计信息,则需要手工更新统计信息。说明  除非指定了 NORECOMPUTE 子句,否则 UPDATE STATISTICS 语句将重新启用自动统计更新。
    还可以使用系统存储过程 sp_createstats 以一个语句对当前数据库中所有用户表的适于统计的列创建统计信息。不适于统计的列包括不确定或不精确计算列,或数据类型为 image、text 和 ntext 的列。如果不再需要保留和维护为一个列生成的统计信息,可以将这些信息删除。SQL Server(当数据库选项设置为 ON 时)在列上创建的统计信息将自动老化和除去。手动创建统计信息使得可以创建包含多种列密度(列组合的重复值的平均数量)的统计信息。例如,一个查询包含如下子句:WHERE a = 7 and b = 9在这两个列 (a, b) 上一起手动创建统计信息使 SQL Server 可以对查询作出更准确的估计,因为该统计信息也包含 a 和 b 列组合的不重复值的平均数量。