包含多列的Sql server表



需要一些输入我需要创建表colprimkey1,col2,colyear,day1,day2,day3,…在azure/synapse中这样的Day366(记录较少,否则将以十亿记录结束)对于主要更新的DML来说,它是否会更好,并提供更好的性能(这将在稍后讨论),而不是相同的表,如

colprimkey1、col2 colyear dayofyear daydata然后1, xx, 2020,"俊",881, xx, 2021年,第4天,28日吗?

我正在努力day2 colprimkey1、col2 colyear,兴奋不已,把…day3661, xx, 2020、88、10,34岁,28日,41…

对于效率、存储、性能等方面还有什么建议吗提前感谢

我尝试过小数据,但不是大规模的,只考虑它会减少表中的记录数量,但列明智的数据会更多。

如果有人在类似的情况下得到更好的解决方案,请告诉我

如果有人在类似的情况下得到更好的解决方案,请告诉我

是的,我曾经使用过多tb的表,每个表中有数百亿行。

对于效率、存储、性能还有什么建议吗

不要用行代替列。正确地构建您的表,并使用根据您计划运行的查询类型设计的适当索引。

对于DML会更好吗?主要是更新和提供更好的性能

不,事实上,它可能对性能更差,特别是当试图搜索多列或将数据拼凑在一起时。

B-Tree索引的搜索时间复杂度为O(log(n))。如果您的表有10亿行,在最坏的情况下,log2(1 billion)= 40。也就是说,只需要搜索40个节点就可以找到您正在搜索的任何数据子集。如果你的表增长到1万亿行,log2(1 trillion) = 50。我的图形计算器可以在一秒钟内查找50个节点,任何现代计算机在几毫秒或更短的时间内。

如果您计划执行聚合类型的查询,那么从压缩角度和批处理模式操作来看,columnstore索引可能更有效。

如果您将行拆分为多个列,您将失去上述效率收益,并且需要编写更复杂的查询来搜索和重塑数据。对数十亿行执行unpivot操作需要很长时间。

相关内容

最新更新