【问题标题】:Cursors on MySQL - Good or Bad [closed]MySQL 上的游标 - 好或坏 [关闭]
【发布时间】:2011-08-09 15:20:09
【问题描述】:

我一直听到有人说使用游标不好,尤其是在 Microsoft SQL Server 中,因为它们非常慢。

MySQL 上的 Cursors 也是这种情况吗? MySQL 中的游标是否也会降低性能?有人可以请教一下 MySQL 中游标的使用吗?

【问题讨论】:

  • 这很大程度上取决于你有什么选择。
  • 替代方案?如果您问的是关于不同数据库类型的决定,那么答案是 - 无... :-(
  • 没有。替代方案,如“如果光标对您来说太慢,您还能使用什么?”。例如,您可以使用某种脚本语言从数据库中获取数据,在那里进行处理,然后将数据包放入数据库(如果需要)。这可能会或可能不会比光标快 - 取决于许多因素。
  • 嗯,它是我正在谈论的云环境(亚马逊),并且计算了来自和来自我的服务器的任何流量。现在我所指的例程可能是处理一个巨大的迭代任务。我可以使用可以获取记录并进行迭代插入的 java 程序。但是我不确定是否值得尝试创建一个游标来执行此任务,因为整个任务实际上是在一次调用中完成的,一个数据库连接可以节省大量数据库资源。从脚本程序运行它,我将浪费大量的网络和数据库连接来执行此操作。

标签: mysql performance database-performance database-cursor


【解决方案1】:

大多数现代数据库(包括 MySQL)旨在执行基于集合的操作。游标的问题在于它们执行基于行(或过程)的操作。因此,当您使用游标完成在现代 DBMS 上无需游标即可完成的工作时,您几乎总是会看到性能下降。

看看this article,它在这两个方面做得不错。它是在考虑 SQL Server 的情况下编写的,但大多数概念都适用。

【讨论】:

  • 哇...多棒的链接!我将尽我所能理解 SQL 中的“基于集合”和“过程”方法以及为什么“基于集合”方法更好。相信学完这些我就能拿到证书了。
【解决方案2】:

只需创建并填充一个临时表。这就是大多数 RDBMS 实现游标的方式。

【讨论】:

    【解决方案3】:

    游标本质上是迭代的 - 无论任何数据库类型,它们肯定会变慢。因此,您应该尽一切努力避免它们并尝试使用 SQL 查询找到解决方案。然而,它们存在于无法通过查询解决的问题 - 所以只有在绝对必要时才使用它们。

    【讨论】:

    • “比什么慢”?
    • umm 与非基于cursur的解决方案相比-“直接sqls”,如果有可能的话。我不知道这不是很明显
    • 哦,对不起,我不知道'direct sqls'是什么。因此,如果比较它们之间的差异,我无法给出任何答案。
    猜你喜欢
    • 2012-10-30
    • 2015-03-08
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多