你好 SQL 大师在那里......我有这个月之久的问题,我似乎无法解决。我有这个非常宽的(报告)表大约。100多个领域。目前,它有大约 200 万条记录,并且随着数据的出现速度,它可能会在未来 1-2 个月内翻一番。目前运行可以接受。但在接下来的几个月里不再那么确定了。基本上,我只想知道这种类型的表的最佳索引计划是什么。这不是实际的表格,但非常接近。我只是想说明使用的各种数据类型。
ID bigint IDENTITY (UNIQUE CLUSTERED INDEX)
Column1 varchar(4000) NULL
...
Column50 varchar(1000) NULL
Column60 int NULL
...
Column60 nvarchar(max) NULL
现在,当前以这种方式查询此表:
SELECT <ALL COLUMNS EXCEPT ID>
FROM ThisTable WITH(NOLOCK) --i know how this works dont warn me :)
WHERE
(@Column1 IS NULL OR CHARINDEX('|' + [Column1] + '|', @Column1) > 0))
...
AND (@Column99 IS NULL OR CHARINDEX('|' + [Column99] + '|', @Column99) > 0))
每个参数/字段的可能值为:
@Column1 = '|value1|value2|value3|'
Column1
value1
value2
我知道基本的执行计划阅读和我所看到的......有很多扫描正在进行。但正如我所说,似乎我已经碰壁了,这就是我现在在这里寻求帮助的原因:)。我知道如何根据小表的用途来索引小表,但表这么宽?我只能对自己哈哈大笑:D
有什么想法吗?我已经阅读了一些关于 Columnstore INDEX 的内容。这是我能想到的最可行的解决方案。但目前关于这种方法的可用信息非常少。
如果你想知道我是怎么想出这张桌子的。那么它的内容来自不同的表(展平)。每晚进行处理。结果被导出到 CSV 文件中,然后该文件将用作另一个报告应用程序的数据源。
提前致谢!