我有一个大约有3.5亿行的巨大表格,它们不时被更新(大约每一行 - 一次在5分钟内)并且批量更新(一次更新多行,如一行100行)< / p>
现在在一个单独的应用程序中,我需要定期运行查询(例如5分钟),如果以正常方式完成,这需要很长时间。
我需要有关如何以高效的方式进行操作的建议。分析服务是否适用于此类任务?
请提供您对此的意见/建议。
此致 思鲁提
答案 0 :(得分:2)
1 - 确保您拥有正确的索引结构。请记住,索引会降低写入和更新速度。通常,只要插入或更新行,就会更新 EVERY 索引。这也会导致锁定。
2 - 读写之间的一致性有多重要?关键任务是每个查询都包含上次更新中每行的最新记录吗?如果不是,您可以在select语句中使用WITH (NOLOCK)
等锁定提示,这将提供可能过时的记录(如果它们在您阅读时更新),但会绕过行级锁现在等待UPDATE
或INSERT
完成。
答案 1 :(得分:1)
由于这是一个非常通用的问题,我只能提供非常通用的答复。
1)索引确实增加了插入等的开销,但与其他地方的性能提升相比,它们通常是边缘的。使用适当的索引来改善应用程序选择性能。
2)我推断你正在经常阅读你正在写作的内容。您可能会受益于触发器为您预先计算中间结果,存储在另一个表中。根据写入的性质,您可能需要从头开始删除重新计算,或者只计算更改的影响(使用deleted
和inserted
表)。
修改强>
如果您正在监控特定的写入;在桌子上创建一个触发器。
然后,您只需要检查正在写入的数据,而不是整个表。
答案 2 :(得分:0)
当你在这里时,不要在生产中使用SELECT *查询,尤其是在你加入时。您返回的数据超出了您的需要(连接字段包含相同的数据),这会浪费网络和服务器资源。再花十几秒钟,只需输入每次运行时都需要具有更好性能查询的字段。
然后查看您正在运行的查询以获得其他性能增强功能。有许多方法可以编写性能不佳的查询,并且在您描述的系统中,您根本无法承担这样的费用。给自己写一本关于性能调优的书,并详细阅读有关调优查询的章节。然后阅读其余部分。在一个系统中,这种大型的性能调整是一项关键技能。当你处理这么大的东西时,你不会因为不了解数据库概念和内部构件而深入查询并且不再深入查询。
答案 3 :(得分:0)