小编boo*_*ife的帖子

无法修复的空间索引损坏是否正常?

我有一个空间索引用于该DBCC CHECKDB报告损坏:

DBCC CHECKDB(MyDB) 
WITH EXTENDED_LOGICAL_CHECKS, DATA_PURITY, NO_INFOMSGS, ALL_ERRORMSGS, TABLERESULTS
Run Code Online (Sandbox Code Playgroud)

空间索引、XML 索引或索引视图“sys.extended_index_xxx_384000”(对象 ID xxx)不包含视图定义生成的所有行。这不一定表示此数据库中的数据存在完整性问题。

空间索引、XML 索引或索引视图“sys.extended_index_xxx_384000”(对象 ID xxx)包含不是由视图定义生成的行。这不一定表示此数据库中的数据存在完整性问题。

CHECKDB 在表“sys.extended_index_xxx_384000”(对象 ID xxx)中发现 0 个分配错误和 2 个一致性错误。

维修级别为repair_rebuild.

删除并重新创建索引不会删除这些损坏报告。没有EXTENDED_LOGICAL_CHECKS但有DATA_PURITY错误是不报告的。

此外,CHECKTABLE尽管它的 CI 大小为 30 MB 并且有大约 30k 行,但该表需要 45 分钟。该表中的所有数据都是点geography数据。

在任何情况下都会出现这种行为吗?它说“这不一定代表完整性问题”。我应该做些什么?CHECKDB正在失败这是一个问题。

此脚本重现了该问题:

CREATE TABLE dbo.Cities(
    ID int  NOT NULL,
    Position geography NULL,
 CONSTRAINT PK_Cities PRIMARY KEY CLUSTERED 
(
    ID ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = …
Run Code Online (Sandbox Code Playgroud)

sql-server spatial dbcc-checkdb sql-server-2014

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

ON 子句的位置实际上是什么意思?

正常的JOIN ... ON ...语法是众所周知的。但也可以将ON子句JOIN与其对应的分开放置。这在实践中很少见,在教程中找不到,我也没有找到任何网络资源甚至提到这是可能的。

这是一个可以玩的脚本:

SELECT *
INTO #widgets1
FROM (VALUES (1), (2), (3)) x(WidgetID)


SELECT *
INTO #widgets2
FROM (VALUES (1, 'SomeValue1'), (2, 'SomeValue2'), (3, 'SomeValue3')) x(WidgetID, SomeValue)

SELECT *
INTO #widgetProperties
FROM (VALUES
    (1, 'a'), (1, 'b'),
    (2, 'a'), (2, 'b'))
x(WidgetID, PropertyName)


--q1
SELECT w1.WidgetID, w2.SomeValue, wp.PropertyName
FROM #widgets1 w1
LEFT JOIN #widgets2 w2 ON w2.WidgetID = w1.WidgetID
LEFT JOIN #widgetProperties wp ON w2.WidgetID = wp.WidgetID AND wp.PropertyName = …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql

23
推荐指数
2
解决办法
2283
查看次数

如何通过 UNPIVOT(循环连接)使用批处理模式?

我有以下形式的查询:

SELECT ...
FROM ColumnstoreTable cs
CROSS APPLY (
    SELECT *
    FROM (VALUES
        ('A', cs.DataA)
        , ('B', cs.DataB)
        , ('C', cs.DataC)
    ) x(Col0, Col1)
) someValues
Run Code Online (Sandbox Code Playgroud)

这从 Columnstore 支持的子查询 ( ColumnstoreTable) 中获取每一行并将这些行相乘。这本质上是一个UNPIVOT. 真正的查询比这更大。这部分查询会进入其他处理。

这里的问题是这CROSS APPLY是作为一个循环连接实现的,这是一个合理的选择。不幸的是,循环连接不支持批处理模式。

这部分查询对性能非常关键,我怀疑以批处理模式运行它可能对性能非常有益。

我怎样才能重写这个查询,这样我就不会退出批处理模式?

我确实尝试使用临时表而不是VALUES,但这并没有改变这样一个事实,即没有相等连接条件来进行哈希连接。

sql-server columnstore unpivot sql-server-2014 batch-mode

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

$IDENTITY 在 SQL Server 中是否有记录且可靠?

我了解到 SQL Server 可以使用伪列返回表的(单个)标识列的值$IDENTITY

SELECT $IDENTITY FROM Table
Run Code Online (Sandbox Code Playgroud)

此功能是否有文档记录且可靠?唯一的官方提及是在IDENTITY页面上,但它隐藏在代码示例中。这表明它可能是未记录的。与此功能匹配的 Google 也非常少。

sql-server identity

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

让 SQL Server 向开发机器上的操作系统释放内存的好方法是什么?

在我的开发机器上,我的 SQL Server 配置了很高的最大内存量(8GB 的​​ 16GB)。这是许多开发任务所必需的。

不过,有时我想找回我的记忆。我不想永久消耗 8GB。

让 SQL Server 突然将所有内存释放给操作系统的好方法是什么?

DBCC DROPCLEANBUFFERS这样做。它只是将干净的缓冲区标记为可用。

重新启动 SQL Server 是一个问题,因为由于此错误/功能,这会导致运行 1 分钟的数据库恢复:停止 SQL Server 服务会导致数据库无法完全关闭(请为该连接项投票;似乎是一个严重的错误) .

sql-server

7
推荐指数
2
解决办法
5万
查看次数

什么是“sys.extended_index...”索引?

一个CHECKDB运行报告腐败sys.extended_index_1066482673_384000。名称模式代表什么样的索引sys.extended_index_...?消息是:

空间索引、XML 索引或索引视图“sys.extended_index_1066482673_384000”(对象 ID ...)不包含视图定义生成的所有行。这不一定表示此数据库中的数据存在完整性问题。有关解决空间索引、XML 索引和索引视图上的 DBCC 错误的详细信息,请参阅 SQL Server 联机丛书。

sql-server sql-server-2014

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

如何随机排序行但将组保持在一起?

我的桌子看起来像这样:

GroupID INT NOT NULL
SomeValue INT NOT NULL
Run Code Online (Sandbox Code Playgroud)

我想GroupID在结果集中保持相同的行。不过,这些组本身应该是随机排序的。SomeValue应该是次要排序标准。像这样:

GroupID, SomeValue
13, 1
13, 2
7, 1
7, 2
11, 1
11, 2
...
Run Code Online (Sandbox Code Playgroud)

ORDER BY GroupID, SomeValue不会随机排序组。ORDERBY NEWID()是完全随机的。ORDER BY SomeHash(GroupID), SomeValue浮现在脑海中,但我每次都需要一个新的随机顺序。

如何才能做到这一点?

sql-server sql-server-2014

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

当模式为“prefix%”形式时,如何获得 (LIKE @p) 的良好执行计划

我正在使用一个执行表单查询的 ORM:

SELECT Columns
FROM T
WHERE Col LIKE @p0 ESCAPE '~'
Run Code Online (Sandbox Code Playgroud)

Col已编入索引且索引正在覆盖。谓词非常有选择性。这些表有 500,000 行。

我总是在查询字符串前缀(例如'prefix%')。显然,这里的 SQL Server 不是静态知道的。但我知道 SQL Server 基本上能够根据LIKE带有前缀的模式进行查找。

我希望 SQL Server 在执行时发现要扫描的索引的相关范围,并且只扫描该范围。不过,我得到的执行计划有一个索引扫描。

ORM 不支持OPTION (RECOMPILE),我不确定它是否是一个不错的选择,因为查询在大约 20 毫秒内执行。(但是我希望这个查询更快。通过搜索,这应该能够在 ~1ms 内运行)。

我可以以某种方式让 SQL Server 在这里执行搜索吗?

sql-server sql-server-2014

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

对 VLDB 使用标准版

为了节省许可成本,我正在评估是否可以使用 VLDB 的标准版。我将概述场景:

  • 此处,“VLDB”表示 5TB。
  • 预计随着时间的推移,规模将保持稳定。
  • 几乎所有数据都在一个表中。
  • 查询和 DML 模式是一种键值类型的场景。主键只能进行单行访问。

我想知道我需要企业版做什么。我不会从分区中获得任何好处,因为我不想切换分区或将它们放在不同的存储上。数据压缩可以为我们节省 50%,但我们使用廉价存储。与昂贵的许可证相比,节省的费用微不足道。

对于 HA,我不明白为什么我不能使用已弃用但仍在工作的镜像。这并不理想,但企业版要为不明确的好处付出高昂的代价。

尽管如此,在这里使用标准版还是让我感到紧张,因为它不是普遍推荐的,而且似乎有点冒险。寻求有关这种情况的一些建议。谢谢!

sql-server license sql-server-2014 enterprise-edition

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

行版本控制会增加索引的大小吗?

行版本控制为每行维护 14 个字节的内部版本控制信息。但这真的是每行的成本还是也适用于表中每个索引的成本?

似乎 14 个字节也必须添加到所有索引记录中,以便仅索引扫描(和其他仅索引访问)可以查看版本信息并感知数据的时间点快照。

不过,我在网上能找到的所有信息都只谈到每行 14 字节的开销。

sql-server

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