41得票4回答
在定义表格时,列的顺序重要吗?

在定义表格时,将列按逻辑分组并将这些分组按目的排序是有帮助的。表格中列的逻辑顺序传达给开发人员一定的含义,并且是良好风格的一个元素。 这是清楚的。 然而,不清楚的是,表格中列的逻辑顺序是否会对其在存储层的物理顺序产生影响,或者是否会对其他相关事项产生任何影响。 除了对风格的影响之外,列的...

40得票2回答
使用XML读取器优化计划

执行从这里查询,以从默认的扩展事件会话中提取死锁事件 SELECT CAST ( REPLACE ( REPLACE ( XEventData.XEvent.value ('(data/value)[1]', 'varchar(max)'), ...

38得票2回答
DELETE vs TRUNCATE

我正在努力更好地理解DELETE和TRUNCATE命令之间的区别。我的理解大致如下: DELETE -> 数据库引擎会找到并从相关数据页和包含该行的所有索引页中删除该行。因此,索引越多,删除所需时间越长。 TRUNCATE -> 简单地批量删除表的所有数据页,这是一种更高效的删除表内容的选...

30得票1回答
为什么对于这个谓词来说,扫描比查找更快?

我能够重现一个我认为是意外的查询性能问题。我希望得到一个关注内部机制的答案。 在我的机器上,以下查询执行了一个聚集索引扫描,并且花费了大约6.8秒的CPU时间: SELECT ID1, ID2 FROM two_col_key_test WITH (FORCESCAN) WHERE ID1...

28得票1回答
在SQL Server中,统计数据在物理上存储在表和索引的元数据中。

查询优化器使用的统计信息在SQL Server数据库文件和缓冲池中的物理存储位置在哪里? 更具体地说,是否有办法通过DMV和/或DBCC来确定统计信息所使用的页面? 我拥有SQL Server 2008 Internals和SQL Server Internals and Troubles...

26得票1回答
当访问相同的LOB数据时,逻辑读取结果会不同。

以下是三个简单的测试,它们读取相同的数据,但报告的逻辑读取非常不同: 设置 以下脚本创建一个测试表,其中包含100个相同的行,每个行都包含一个足够大的数据以确保其存储在行外的xml列。在我的测试数据库中,每行生成的xml长度为20,204字节。 -- Conditional drop I...

26得票2回答
将一个列从NOT NULL更改为NULL - 底层发生了什么?

我们的表中有23亿行数据。我们想把一个列从NOT NULL改为NULL。该列包含在一个索引中(不是聚集或主键索引)。数据类型不会改变(它是一个INT)。只是空值属性会发生变化。语句如下: Alter Table dbo.Workflow Alter Column LineId Int NUL...

25得票1回答
varchar(n)的开销是多少?

我想问一下来自Postgres doc的关于varchar(n)类型的此片段的含义: 短字符串(最多126个字节)的存储要求是1个字节加上实际字符串,其中包括字符情况下的空格填充。较长的字符串具有4个字节的开销,而不是1个字节。 假设我有一个varchar(255)字段。现在,以下语句...

21得票1回答
哈希键探测和剩余部分

嘿,我们有一个像这样的查询: select a.*,b.* from a join b on a.col1=b.col1 and len(a.col1)=10 假设上述查询使用哈希连接并具有剩余部分,探测键将是col1,剩余部分将是len(a.col1)=10。 但是在另一个例子中,...

20得票1回答
非聚簇索引存储于聚簇列存储

在SQL Server中,对于一个行存储表上的非唯一非聚集索引,该索引会在非聚集索引结构的所有层级中包含基本对象的书签(RID或聚集键)。这个书签作为非聚集索引的键的一部分存储在所有索引层级上。 另一方面,如果非聚集索引是唯一的,那么书签只存在于索引的叶子层级 - 不作为键的一部分(实际上,...