创建表时无法查看统计信息

时间:2015-06-28 13:35:44

标签: sql-server sql-server-2014

我正在阅读有关统计数据的白皮书,但我无法得到几个问题的答案

- 重现问题的代码

CREATE TABLE stats_update
  (
     id   INT IDENTITY(1, 1) CONSTRAINT PK__stats_up__3213E83FCCAB6EF5 PRIMARY KEY,
     name CHAR(20) DEFAULT 'a'
  )

--check for stats
EXEC sp_helpstats 'stats_update'

go
--insert two values
INSERT INTO stats_update
DEFAULT VALUES

go 2

--check for stats
EXEC sp_helpstats
  'stats_update',
  'all'

SELECT *
FROM   stats_update

--lets create an index now on name 
CREATE INDEX nci_test
  ON dbo.stats_update(name)

--check for stats
EXEC sp_helpstats
  'stats_update',
  'all'

--lets see when we stats last updated
DBCC show_Statistics ('stats_update', 'PK__stats_up__3213E83FCCAB6EF5')

go
--now lets insert some  rows
INSERT INTO stats_update
DEFAULT VALUES

go 200
--lets check stats again
--check for stats
exec sp_helpstats 'stats_update', 'all'

DBCC show_Statistics ('stats_update', 'PK__stats_up__3213E83FCCAB6EF5')

SELECT *
FROM   sys.stats
WHERE  object_id = object_id('stats_update')


go

INSERT INTO stats_update
DEFAULT VALUES

go 2000

SELECT *
FROM   stats_update

SELECT *
FROM   stats_update
WHERE  id = 10 

DBCC show_Statistics ('stats_update', 'PK__stats_up__3213E83FCCAB6EF5')

根据评论更新
问题:
我在上面的脚本的任何阶段都看不到直方图,直方图只有在重建索引或执行更新统计数据后才会填充。可以帮助我理解为什么

1 个答案:

答案 0 :(得分:2)

您的问题不是很明确,但您的脚本执行的操作都不需要创建有关id列的详细统计信息。

您的脚本执行

INSERT INTO stats_update
DEFAULT VALUES; /*Doesn't need column stats on id*/

SELECT *
FROM   stats_update /*Table cardinality is stored separately*/

SELECT *
FROM   stats_update
WHERE  id = 10  /*Unique constraint so can assume 1 row*/

如果您将谓词更改为类似下面的内容,则会创建统计数据。

SELECT *
FROM   stats_update
WHERE  id > 10