- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的应用程序中创建了许多游标,以便在每次游标单次运行中逐行操作我只选择了 500 或 1000 条记录,以便游标可以在单次运行中像 postilion 一样快地完成,换句话说,我选择了单个游标运行的记录数量有限。
为了更快地执行游标而不增加服务器负载,我使用了以下两种声明游标的方法。
声明 1:声明 DB_CURSOR_01 CURSOR LOCAL STATIC READ_ONLY FORWARD_ONLY FOR
声明 2:声明 DB_CURSOR_02 CURSOR FAST_FORWARD FOR
注意:我没有使用游标的默认声明,我正在使用其他类型的游标使其工作得更快,据我所知,上面提到的声明 1 比声明 2 快,如果我错了,请纠正我。
问题:另一种逐行操作的方法是通过“While loop using temporary table”。那么现在我的问题是,如果我使用临时表将所有游标转换为 while 循环,是否有助于提高服务器性能?
实际上,我们的 DBA 指出服务器性能受到游标的影响,如果我付出大量努力将所有这些游标转换为 while 循环,它会给我带来性能优势吗?或者我在上面提到的声明 1 中声明游标的方式将与 while 循环具有相同的性能?
最佳答案
SQL Server 中的游标非常慢。在其他 RDBMS 上,例如 Sybase,它们是可以的。
以下是如何处理它们的实用方法:
根据我“优化”旧的狡猾代码的经验,游标的主要问题是当它们基于复杂的查询时。复杂查询是指具有多个连接和/或复杂连接条件的查询。游标所做的是,对于每次迭代,它都必须运行此连接操作,这可能比循环体内的操作花费更多的时间。
在这种情况下,将单个选择运行到临时表然后在游标中使用临时表会更有效,另一种方法是使用 STATIC
或 INSENSITIVE
关键字 ( MSDN )。要考虑的一个重要方面是并发性。通过将主游标查询的结果保存到临时表中,可以防止对游标可见的基础表的更改。
要考虑的第二个方面是游标内的选择查询。这很重要,因为每次游标迭代都会运行每个查询,因此在大表上进行选择会消耗大量资源。
我见过一些特别“狡猾”的代码,其中:
JOIN
到主游标查询。这样,该表将只查询一次并将结果保存到临时表。如果您有嵌套游标(一个嵌套在另一个游标中),那将是致命的。尝试移除嵌套。
如果您有很多地方有游标,请优先修复符合上述情况之一的地方。
附言虽然循环是自己的不会拯救你。您仍然需要使用临时表并在临时表上有适当的索引。请参阅:https://dba.stackexchange.com/questions/84365/why-choose-a-top-query-and-temporary-table-instead-of-a-cursor-for-a-loop
以上链接到Aaron Bertrand讨论性能以及游标选项建议的博客。
关于sql-server-2012 - SQL Server - While 循环与 "LOCAL STATIC READ_ONLY FORWARD_ONLY"游标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45383125/
所以...我知道有很多关于如何将 Neo4j 设置为只读模式的文章和 Material 可供阅读。问题是,它似乎对我不起作用。 我在 Neo4j 3.0.3 中有一个现有的数据库(虽然我不是把它放在一
在我的项目中,我想将密码设置为read_only(因为我有一个单独的端点来重置密码)和write_only(因为我不想发送密码在回复中)。 这是我的序列化器: class UserSerializer
我在 WebLogic Server 版本:12.1.2.0.0 的 JPA2 中使用 CacheConcurrencyStrategy.READ_ONLY 并且工作正常,我刚刚使用 PL/SQL D
我有这个模型: class Task(MPTTModel, TimeStampedModel, StartFinishModel): name = models.CharField(max_l
我想存档这样的东西: data class Task( @JsonProperty("id", access = READ_ONLY) val id: String? ... .
我正在使用 org.eclipse.swt.widgets.Combo 类,我正在执行以下操作 Combo myCombo = new Combo(container, SWT.READ_ONLY);
为了使模型属性在 rails_admin 面板中只读,您必须执行以下操作: config.model Style do field :review_count do read_
我有一个 SWT.TOGGLE 按钮矩阵,它们代表我的应用程序上的一些切换激活器。 这个想法是,如果它们存储为激活状态,则将它们显示为切换(按下),但要 SWT.READ_ONLY 因为此屏幕仅具有显
为了使模型属性在 rails_admin 面板中只读,您必须执行以下操作: config.model Style do field :review_count do read_
在 DRF 的 CreateAPI 中创建 Django 对象后,您会得到一个创建状态 201,并且该对象使用您用来创建 Django 对象的相同序列化程序返回。 通缉:创建时:Serializer.
尝试将 @JsonCreator 与 @JsonProperty(value = "version", access = JsonProperty.Access.READ_ONLY) 一起使用时遇到
我想让电子邮件字段在默认的 django 用户模型中是唯一的。所以我做了 unique_together=[('email',)] 。现在在序列化程序中,我希望它是一个只读字段。但是 Django R
我在这里阅读了很多关于使用 openpyxl 和 load_workbook() 中的 read_only 参数读取大型 excel 文件的问题,并且我已经使用 source excels 50x30
我在 drf 项目上工作,我得到的序列化程序数据如下,这绝对没问题: { "message": "Updated Successfully", "status": 200, "
我在我的应用程序中创建了许多游标,以便在每次游标单次运行中逐行操作我只选择了 500 或 1000 条记录,以便游标可以在单次运行中像 postilion 一样快地完成,换句话说,我选择了单个游标运行
我是一名优秀的程序员,十分优秀!