小编Mid*_*C N的帖子

SQL server 如何在 Auto Create Statistics 设置为 OFF 的情况下生成查询计划

我想知道 SQL Server 如何生成“自动创建统计信息”设置为“关闭”的查询计划。

我在搜索答案时偶然发现了以下链接中的以下上下文(对不起,我搜索了,但找不到更好的)。

https://www.simple-talk.com/sql/performance/execution-plan-basics/

表变量从来没有生成统计信息,所以优化器总是假设它们只有一行,而不管它们的实际大小

虽然上面只适用于表变量,但我认为SQL Server会使用相同的原理来导出表的查询计划并决定做一个小测试。

我清除了 PROC 缓存并在具有 100 万条记录的表上运行以下查询

在此处输入图片说明

在此处输入图片说明

我的测试证明我错了,SQL Server 报告缺少统计数据(如预期),但是当没有统计数据时,估计行数为 31622(我预计为 1)。查询优化器是如何在没有统计信息的情况下得出这个值的?

sql-server execution-plan cardinality-estimates

6
推荐指数
1
解决办法
366
查看次数

DBCC IND 不工作

我正在尝试使用以下查询获取 SQL2008 R2 DEV 框中 table1 上的聚集索引使用的页面。

dbcc traceon(3604, -1) 
go 
dbcc ind (0, 'dbo.table1', 1) 
go
Run Code Online (Sandbox Code Playgroud)

但它仍然显示以下输出并且不显示结果。我在这里做错了什么?

在此处输入图片说明

以下消息也记录在 SQL 服务器日志中

消息 DBCC TRACEON 3604,服务器进程 ID (SPID) 59。这只是一条信息性消息;无需用户操作。

sql-server dbcc sql-server-2008-r2

3
推荐指数
1
解决办法
768
查看次数

SQL Server 未列出具有 NULL 值的记录

我今天遇到了一个奇怪的现象。我运行以下查询以查找除 BROKER_RECEIVE_WAITFOR 以外的等待的所有请求

select * from sys.dm_exec_requests where session_id > 55 
and wait_type not like ('BROKER_RECEIVE_WAITFOR') 
Run Code Online (Sandbox Code Playgroud)

查询运行良好,但没有列出任何没有等待的请求,即 wait_type 为NULL(此时有相当多的正在运行的查询没有任何等待)。

为什么会发生这种情况,是不是应该列出所有具有 wait_type 的记录,而不是像“BROKER_RECEIVE_WAITFOR”这样的记录,包括空值?

我正在运行 SQL Server 2008R2 SP3。

sql-server sql-server-2008-r2

1
推荐指数
1
解决办法
160
查看次数