我想从多个表中选择多行,其中一行有数十亿行。它有时需要20秒,并且有超过数千名用户使用它,所以非常糟糕。
我查看了COLUMNSTORE并在我的本地机器上尝试了它,性能比平时快了x50! (请注意,我正在清除缓存以查看差异)
然而,缺点是我无法更新,插入和删除行,这些行经常针对具有十亿行的表进行。
有没有办法优化它? (除了(NOLOCK)脏读,哪个安全性不是问题btw)
该表中已有索引,但没有帮助。
有没有办法执行BATCH EXECUTION(我看到它会执行行)?或者任何优化建议?
使用Microsoft SQL Server 2012
答案 0 :(得分:0)
当达到数十亿行的规模时,通常需要采用不同的方法来处理数据。将内容分成多个数据库并存储在不同的机器上可能更有效,但设计要复杂得多。
另一种方法是考虑使用分区表与基于列的索引的组合。至少这样,您可以为分区暂存更新的数据,然后将更新的数据交换为现有分区以执行更新。请参阅:http://technet.microsoft.com/en-us/library/gg492088.aspx#Update
另一种方法是考虑使用三个表:一个是静态的 - 可能是使用基于列的存储 - 另一个是动态的,只保存最近的更新和插入,第三个只保存已删除行的列表由主键标识。然后,您必须使用视图来协调查询内容。