2011-08-09 10 views
6

Zawsze słyszałem, jak ludzie mówią źle o używaniu kursorów, a jest to szczególnie w Microsoft SQL Server, ponieważ są one bardzo powolne. Czy tak jest w przypadku kursorów MySQL? Czy kursory MySQL również zmniejszają wydajność? Czy ktoś może doradzić na temat używania kursorów w MySQL?Kursory na MySQL - dobry lub zły

+0

To zależy w dużej mierze od tego, jaką masz alternatywę. – Mchl

+0

alternatywy? Jeśli pytasz o decyzję dotyczącą innego typu bazy danych, odpowiedź brzmi - none ... :-( –

+0

Nie. Alternatywy, jak w "jeśli kursory są zbyt wolne dla ciebie, co jeszcze możesz użyć?". na przykład możesz pobrać dane z bazy danych za pomocą jakiegoś języka skryptowego, przetworzyć go tam i umieścić pakiet w bazie danych (jeśli jest to wymagane) .Może to być lub nie może być szybsze niż kursor - w zależności od wielu czynników – Mchl

Odpowiedz

7

Najbardziej nowoczesne bazy danych (w tym MySQL) są zaprojektowane do wykonywania operacji na podstawie zestawu. Problem z kursorami polega na tym, że wykonują operacje oparte na wierszach (lub proceduralne). Z tego powodu prawie zawsze widzisz wydajność, gdy używasz kursorów do wykonania zadania, które można wykonać bez kursorów w nowoczesnym DBMS.

Spójrz na this article, która sprawdza się przyzwoicie. Jest napisany z myślą o SQL Server, ale większość pojęć ma zastosowanie.

+0

Wow ... Co za ... świetny link! Postaram się jak najlepiej zrozumieć zasady "oparte na zestawie" i "proceduralne" w SQL i dlaczego podejście "oparte na zestawie" jest lepsze. Wierzę, że mogę zdobyć certyfikat po tym wszystkim. –

-2

Kursory z natury są iteracyjne - z pewnością będą wolniejsze, niezależnie od typu bazy danych. Dlatego powinieneś zrobić wszystko, aby ich uniknąć i spróbować znaleźć rozwiązania za pomocą zapytań SQL. Mają jednak problemy, których nie da się rozwiązać za pomocą zapytań - więc używaj ich tylko wtedy, gdy jest to absolutnie konieczne.

+0

"zdecydowanie wolniej" w porównaniu do CO? –

+0

umm w porównaniu do rozwiązania nie opartego na cursur - "bezpośrednie sqls", jeśli jest to możliwe. nie wiedziałem, czy to nie było tak oczywiste –

+1

Och, przepraszam, nie wiem, co to są "bezpośrednie sqls". Dlatego nie mogę dać żadnej odpowiedzi, czy są lepsze, czy gorsze, jeśli porówna się każdą z nich. –

1

Po prostu utwórz i wypełnij tabelę tymczasową. W ten sposób większość narzędzi RDBMS implementuje kursory.

Powiązane problemy