当前位置:  开发笔记 > 数据库 > 正文

SQL性能 - 更好地插入和引发异常或检查存在?

如何解决《SQL性能-更好地插入和引发异常或检查存在?》经验,为你挑选了2个好方法。

我正在考虑在我的代码特别重的部分进行优化.它的任务是将统计数据插入表中.这些数据受到其他计划的严重影响.否则我会考虑使用SQL Bulk插入等.

所以我的问题是......

是否可以尝试插入一些数据,知道它可能(不经常)为重复行抛出SqlException?

异常的性能是否比插入前检查每一行更糟?



1> Assaf Lavie..:

首先,我的建议是在正确性方面犯错,而不是速度.当你完成你的项目,并分析表明,你失去显著时间检查的行插入之前存在的,只有优化.

其次,如果所有RDBMS中都有重复项,我认为有插入和跳过的语法,所以这首先应该不是问题.我试图避免异常作为正常应用程序流程的一部分,并将它们留给真正特殊情况.也就是说,不要依赖DB中的异常来解决代码中的逻辑问题.在您的结尾(代码)上保持尽可能多的一致性,并且让DB异常仅表示真正的错误.



2> wuputah..:

在纯粹的性能级别,只需插入数据并处理错误就更快,特别是如果错误很少发生.运行选择查询以检查重复,处理该结果,然后插入(如果成功)将比插入和处理偶然错误慢得多.如果它引发异常,那么由于异常处理在大多数语言中都很慢,因此会慢一点,但处理异常的速度要比任何语言的SQL查询快很多倍.

正如Assaf所说,通常还有一种方法可以显式处理重复项,因此您可以完全避免错误.这将进一步提高性能,并允许您明确表示您以特定方式处理重复项.

是否使用存储过程取决于您 - 它可以帮助提高性能,但代价是在数据库中放入更多逻辑.这是你必须做出的决定.我对此有过不愉快的经历,但这取决于RDBMS和您正在使用的语言.

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有