标签: sparse-column

稀疏列、cpu 时间和过滤索引

稀疏

在对稀疏列进行一些测试时,正如您所做的那样,出现了性能下降,我想知道其直接原因。

数据线

我创建了两个相同的表,一个有 4 个稀疏列,一个没有稀疏列。

--Non Sparse columns table & NC index
CREATE TABLE dbo.nonsparse( ID INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
                      charval char(20) NULL,
                      varcharval varchar(20) NULL,
                      intval int NULL,
                      bigintval bigint NULL
                      );
CREATE INDEX IX_Nonsparse_intval_varcharval
ON dbo.nonsparse(intval,varcharval)
INCLUDE(bigintval,charval);

-- sparse columns table & NC index

CREATE TABLE dbo.sparse( ID INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
                      charval char(20) SPARSE NULL ,
                      varcharval varchar(20) SPARSE NULL,
                      intval int SPARSE NULL,
                      bigintval bigint SPARSE NULL
                      );

CREATE INDEX IX_sparse_intval_varcharval …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2017 sparse-column

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

添加 SPARSE 使表更大

我有一个通用日志表,大约 5m 行。
有一个存储事件类型的“强类型”字段,以及一组包含与事件相关的数据的“弱类型”列。也就是说,那些“松散类型”列的含义取决于事件的类型。

这些列定义为:

USER_CHAR1 nvarchar(150) null,
USER_CHAR2 nvarchar(150) null,
USER_CHAR3 nvarchar(150) null,
USER_CHAR4 nvarchar(150) null,
USER_CHAR5 nvarchar(150) null,

USER_INTEGER1 int null,
USER_INTEGER2 int null,
USER_INTEGER3 int null,
USER_INTEGER4 int null,
USER_INTEGER5 int null,

USER_FLAG1 bit null,
USER_FLAG2 bit null,
USER_FLAG3 bit null,
USER_FLAG4 bit null,
USER_FLAG5 bit null,

USER_FLOAT1 float null,
USER_FLOAT2 float null,
USER_FLOAT3 float null,
USER_FLOAT4 float null,
USER_FLOAT5 float null
Run Code Online (Sandbox Code Playgroud)

每种类型中的第 1 列和第 2 列都被大量使用,但从第 3 列开始,很少有事件类型会提供如此多的信息。因此,我决定将每种类型的第 3-5 列标记为SPARSE.

我首先进行了一些分析,发现实际上,每一列中至少 80% 的数据是null …

sql-server-2008 null sql-server storage sparse-column

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

如何查询 XML 列集中的确切值

我有一个包含 80 多个稀疏列和一个列集列的表,这是一个简单的例子:

DROP TABLE IF EXISTS #ColumnSet
GO

CREATE TABLE #ColumnSet
(
    Id        INT          NOT NULL
  , Value1    VARCHAR(100) SPARSE NULL 
  , Value2    VARCHAR(100) SPARSE NULL 
  , Value3    VARCHAR(100) SPARSE NULL 
  , Value4    VARCHAR(100) SPARSE NULL 
  , AllValues XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
)
GO

INSERT INTO #ColumnSet
(Id, Value1, Value2, Value3, Value4)

VALUES
(1, 'POSITIVE', NULL, NULL, NULL),
(2, 'NEGATIVE', NULL, 'NEGATIVE', NULL),
(3, NULL, NULL, 'NEGATIVE', 'POSITIVE'),
(4, 'NEGATIVE', NULL, 'THIS IS NOT A POSITIVE RESULT', NULL)
GO …
Run Code Online (Sandbox Code Playgroud)

xml sql-server xquery sql-server-2016 sparse-column

6
推荐指数
2
解决办法
1150
查看次数

定义 SPARSE 列有什么缺点吗?

我有一个表,其中列中有很多 NULL 值。但是有些列根本不包含 NULL(尽管可以为空)。将所有这些列声明为 SPARSE 有什么缺点吗?

null database-design sql-server disk-space sparse-column

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