2011-08-09 46 views
6

我一直听到有人说使用游标有问题,这在Microsoft SQL Server中尤其如此,因为它们非常慢。 MySQL上的Cursors也是这种情况吗? MySQL中的游标是否也会降低性能?有人可以请教在MySQL中使用游标吗?MySQL上的游标 - 好还是坏

+0

这很大程度上取决于您有什么替代方案。 – Mchl

+0

替代品?如果您询问关于不同数据库类型的决定,那么答案是 - none ... :-( –

+0

否。如果'您的游标对您来说太慢,您还能使用什么?'的替代选项。例如,您可以使用某种脚本语言从数据库中提取数据,在那里处理数据并将数据包放入数据库(如果需要的话)。这可能会或可能不会比光标更快 - 取决于许多因素。 – Mchl

回答

7

大多数现代数据库(包括MySQL)都设计用于执行基于集合的操作。游标的问题是它们执行基于行(或程序)的操作。正因为如此,当您使用游标执行可以在现代DBMS上不使用游标的情况下完成的工作时,您几乎总能看到性能下降。

看一看this article,这两个人都做得不错。它是用SQL Server编写的,但大部分概念都适用。

+0

哇......真是太棒了!我会尝试尽我所能去理解SQL中的“基于集合”和“程序化”方法,以及为什么“基于集合”的方法更好。我相信我可以在了解了所有情况后获得证书。 –

-2

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

+0

与“什么”相比,“定义较慢”? –

+0

umm与非基于cursur的解决方案相比较 - “直接sqls”,如果有可能的话。我不知道这是不是很明显 –

+1

哦,原谅,我不知道'直接sqls'是什么。所以我不能给出任何答案,如果两者相互比较,他们是更好还是更差。 –

1

只需创建并填写临时表。无论如何,这就是大多数RDBMS的实现游标。