我有一张大桌子,需要定期重新排序。我部分基于此建议,因为我插入的数据顺序(按时间)与我需要的群集方式(按ID)不同(我按顺序插入),因此建议不要使用群集键,这可能导致重新群集以获取有点失控。
由于我每小时写入一次表,因此要警惕这两个过程相互冲突的问题:如果我将CTAS转换为新排序的临时表,然后交换表名,那似乎就像是我打开了写信的大门源表不能进入临时表。
我认为我可以在重新排序时触发一个标志,从而导致ETL暂停写入,但是这似乎有点hacky,而且可能很脆弱。
我当时正在考虑利用锁定和事务,但这似乎不是正确的用例,因为我不认为我在写新表时会锁定要复制的表。有关如何处理此问题的任何建议?
有一些避免自动重新聚类的原因,但是基本上与您不应该建立作业来频繁重新聚类的原因完全相同。您正在使数据库完成所有相同的工作,但没有内置的管理功能。
如果您的表足够大,可以看到按时间进行群集的性能问题,并且您知道ID列是此表(在JOIN和WHERE子句中)被过滤的主要方式,那么这可能是自动选择的一个很好的选择。聚类。
因此,我建议至少测试一下ID上的群集密钥,然后监视/比较性能。
为了简短地回答关于没有冲突的求助问题,我可能建议您使用时间列对早于给定时间的记录(可能在单独的表中)进行重新排序。在排序时,您可能会得到一些新记录。但是您将能够使用该时间列将那些新记录与现在已排序的旧记录结合起来。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句