2011-08-09 41 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的實現遊標。