我正在尝试为我被迫与 Azure SQL 一起使用的稍微奇怪的模式制定最佳索引策略。
- 每天从 ADF 删除、重新创建和加载表格并加载新数据
- 表在加载后只读。
- 表格可以超过 2000 万行和 50 多列宽。
- 表架构可能每天都在变化,因此删除并重新创建
因为我事先不知道完整的架构。我正在向每个表添加一个代理标识列并在此列上创建一个聚集主键。
但是,密钥创建最多需要 15 分钟,并且表在创建过程中被锁定 - 这是一个问题......
所以-也许我把这些桌子堆成一堆?忘记代理键并创建非聚集索引,因为创建不会锁定表。
我错过的堆有什么不好的影响吗?我可以不用聚集索引\键吗?
我希望这是有道理的——如果不把问题写成 2 页长的话,就有点难以理解了....
通过删除表,您应该避免 SQL Server 在某些情况下对堆执行 DELETE 时不释放存储的弱点。
通过不执行 UPDATE,您应该避免在堆中转发指针的弱点。
通过在聚集表而不是堆中创建,这为您在此表上的 SELECT 查询留下了潜在优势。为了解决该主题,我们需要您拥有(或考虑)的查询和索引。这里没有通用规则,都是关于访问模式的。据我所见,在查询方面,一般来说,使它成为一个聚集表并没有什么“神奇”优势,所以你可以逐个处理这种情况(SELECT by SELECT 以及你如何处理那些关于索引创建的性能调整ETC)。
当然,我可能会忘记一些明显的事情......