【问题标题】:permanent damage from SELECT query?SELECT 查询造成的永久性损坏?
【发布时间】:2016-12-19 10:20:06
【问题描述】:

我想执行一些 SELECT 语句以从应用程序数据库(生产环境,而不是测试)中获取一些数据,我会造成任何永久性损坏吗?

我听说不建议使用 SELECT * 因为它会减慢速度等,但我认为从长远来看没有什么会受到影响?它是否会以某种方式损害应用程序用户的应用程序性能超过几秒钟?

【问题讨论】:

  • SELECT 会降低系统速度,某些类型的复杂查询会导致数据缓存在 TempDB 中,从而导致 TempDB 增长。尽管 SELECT 通常不会损坏系统,但它仍然会造成性能不平衡,这取决于数据库系统的关键程度以及您将要做什么。 SELECT * 不会造成自动降级,它更像是在生产工作中最好避免的一种不好的做法,用于快速查看记录没什么大不了的
  • 另一件可能出错的事情是记录在编辑模式下被锁定,应该是其他一些开发人员告诉我的,不过我还没有看到。
  • 但是您所写的减速和性能不平衡是暂时的,对吧?那么只有真正复杂的 SELECT 查询会使 TempDB 增长,才能永久减慢速度?
  • 你不需要任何复杂的东西来吃服务器资源。例如,只是一对相当大的表的 CROSS JOIN。
  • SELLECT * 可能包含不相关的列,这意味着数据传输可能需要一些额外的时间。而已!没什么好担心的。

标签: sql sql-server sql-server-2008 tsql select


【解决方案1】:

您不能真正造成永久性损害。失控查询可能会阻止其他人访问数据库,因为它会占用资源。它还可以填满临时空间,在所有用户之间共享。

但是,您必须有相当复杂的查询才能完成这些事情。仅仅输入select * 是一个性能良好的查询,不会导致此类问题。

你应该考虑两件事。首先,了解执行计划,以便了解数据库的实际工作方式以及每个查询将如何执行。其次,要求一个包含样本数据的较小数据库,这样您就可以随意玩耍并减少干扰他人的机会。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 2013-12-22
    • 2011-07-05
    • 1970-01-01
    • 2021-12-30
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多