带表锁定的SQL查询

带表锁定的SQL查询,sql,locking,Sql,Locking,我正在与团队中的一位开发人员同事进行争论 问题:SQL查询X在测试系统上运行1秒,但在实时系统上运行的时间未知(150个用户可以同时运行查询)。 该查询在8个表上产生锁,其中7个是无用的。 他的想法是在7张桌子上放一个带(NOLOCK)的锁,这样就没有锁了 我的论点是: 我的建议是,使用nolock时,用户1可能会运行select查询,该查询需要10秒才能完成,因为此时服务器性能较低,用户2会更改7个表中的一个表中的值,例如客户。 然后,查询将完全错误,或者可能无法填充预期的数据集,它将崩溃并抛

我正在与团队中的一位开发人员同事进行争论

问题:SQL查询X在测试系统上运行1秒,但在实时系统上运行的时间未知(150个用户可以同时运行查询)。 该查询在8个表上产生锁,其中7个是无用的。 他的想法是在7张桌子上放一个带(NOLOCK)的锁,这样就没有锁了

我的论点是:

我的建议是,使用nolock时,用户1可能会运行select查询,该查询需要10秒才能完成,因为此时服务器性能较低,用户2会更改7个表中的一个表中的值,例如客户。 然后,查询将完全错误,或者可能无法填充预期的数据集,它将崩溃并抛出错误。所以,使用Rowlock

他的论点是:

我们不需要吵架,出现这种情况的可能性太小了。我们不需要完美。按要求去做,不要去想


我能说些什么来战胜那些不指望完美主义的人呢?

我相信,根据你所说的,你的推理是正确的

如果有任何可能出现错误,无论操作中导致数据库丢失完整性的可能性有多小,都必须修复

完整性是数据库设计的基本前提之一。你的同事听起来工作不严谨

如果你试图构建一个技术论点来“击败”你的同事,请注意它可能不会给你想象中的预期结果

如果你的同事不服从你所说的,如果你真的确信你的推理是正确的,那么我会告诉你的团队领导为什么你认为这很重要,并向他展示你的解决方案。如果他同意您的同事的意见,因为他认为数据库完整性并不重要,那么您也许应该考虑到其他地方工作

别误会我的意思,我意识到在现实世界中,软件不可能“完美”,否则它永远不会发布。但是像数据输入检查这样的基础工作不应该被忽略,而且也不难做到。这与说“好吧,我们不必费心验证用户输入”基本相同。这是你在一年级计算机科学课上学到的


在这个星球上,我们有足够多的蹩脚软件,在这个时代,我们有能力做出惊人的事情。软件工程中的草率不再有一席之地,我希望你不要让你的同事降低你的标准。保持高标准,你会比他学到更多,最终会做得更好。

我相信,根据你所说的,你的推理是正确的

如果有任何可能出现错误,无论操作中导致数据库丢失完整性的可能性有多小,都必须修复

完整性是数据库设计的基本前提之一。你的同事听起来工作不严谨

如果你试图构建一个技术论点来“击败”你的同事,请注意它可能不会给你想象中的预期结果

如果你的同事不服从你所说的,如果你真的确信你的推理是正确的,那么我会告诉你的团队领导为什么你认为这很重要,并向他展示你的解决方案。如果他同意您的同事的意见,因为他认为数据库完整性并不重要,那么您也许应该考虑到其他地方工作

别误会我的意思,我意识到在现实世界中,软件不可能“完美”,否则它永远不会发布。但是像数据输入检查这样的基础工作不应该被忽略,而且也不难做到。这与说“好吧,我们不必费心验证用户输入”基本相同。这是你在一年级计算机科学课上学到的


在这个星球上,我们有足够多的蹩脚软件,在这个时代,我们有能力做出惊人的事情。软件工程中的草率不再有一席之地,我希望你不要让你的同事降低你的标准。保持你的标准高,你会学到更多的东西,最终会做得更好。

< P>如果你使用的是SQL Server,听起来你是你,而不是担心使用NoLoCK来阻止读写器(在高使用的SQL Server DBS上做大量的读写),你应该考虑使用。这适用于SQL Server 2005及更高版本


这使SQL Server的工作方式更像Oracle,并消除了读卡器阻塞写卡器造成的问题。在你决定使用它之前,请仔细阅读这些缺点。

如果你使用的是SQLServer,它听起来好像你是你,而不是担心使用NoLoCK来阻止读写器(在高使用的SQL Server DBS上做大量的读写),你应该考虑使用。这适用于SQL Server 2005及更高版本


这使SQL Server的工作方式更像Oracle,并消除了读卡器阻塞写卡器造成的问题。在决定使用它之前,请仔细阅读它的缺点。

ACID:
-原子性、一致性、隔离性和耐久性。这些是数据库的基本原则,如果忽视这些原则,后果自负

您的同事所说的是,忽略隔离是可以的,隔离是您无法看到已完成一半的事务的特性。在某些情况下这没关系

例如,我们有一组报告,这些报告不用于关键业务目的,而仅用于指示系统的总体运行状况。因此,95%的准确率已经足够了,我们不希望报告妨碍实际工作

但是,对于英国广播公司的声明