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
Odpowiedz
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.
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. –
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.
"zdecydowanie wolniej" w porównaniu do CO? –
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 –
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. –
Po prostu utwórz i wypełnij tabelę tymczasową. W ten sposób większość narzędzi RDBMS implementuje kursory.
- 1. zawsze blok @ * z pojedynczym niepustującym przydziałem - dobry, zły lub nieistotny?
- 2. Kursory myszy CSS ... obracają kursory?
- 3. Wiele klas DbContext dla pojedynczej aplikacji internetowej. Dobry czy zły?
- 4. Czy ToString() jest dobry, zły, czy po prostu zbędny?
- 5. Konfiguracja połączenia sieciowego w konstruktorze: dobry czy zły?
- 6. element iframe do ładowania reklamy jest dobry czy zły?
- 7. Emulowanie nazwanych parametrów funkcji w PHP, dobry czy zły pomysł?
- 8. Czy istnieje dobry sposób na wykrycie, że MySQL jest "gotowy"?
- 9. Właściwa inicjalizacji inteligentne kursory tablicy
- 10. Dobry edytor Symfony Netbeans lub Eclipse?
- 11. Proszę polecić dobry samouczek Slime'a lub screencasta
- 12. Korzystanie z tymczasowego, używając filesort zły pomysł w mysql?
- 13. Dobry przykład klasy ilości lub pieniędzy
- 14. Zignoruj zły certyfikat - .NET CORE
- 15. Dobry sposób na łączenie React i ulotek
- 16. Native OSX Lion rozmiar kursora na zlecenie NSWindow lub NSView
- 17. Apostrophe's w adresie URL. Dobry pomysł czy zły pomysł? I dlaczego?
- 18. Dlaczego JFormattedTextField jest zły?
- 19. Dobry sposób na uniknięcie "udostępniania"?
- 20. zmienić na dobry pomysł mysqli?
- 21. Cronjob lub wydarzenie MySQL?
- 22. HTML5 <audio> zły wybór na transmisję na żywo?
- 23. Shadowing Inherited Generic Interface Członkowie w .NET: dobry, zły czy brzydki?
- 24. Moduł daje zły wynik?
- 25. Homebrew - zły interpreter: Brak takiego pliku lub katalogu
- 26. Firebird kursory - Dlaczego byłoby użyć jednego
- 27. Dobry start dla Laravel Początkujący
- 28. gdzie powinienem robić obliczenia, PHP lub Mysql?
- 29. findViewById przywraca zły element?
- 30. ConfigurationManager.OpenExeConfiguration - ładuje zły plik?
To zależy w dużej mierze od tego, jaką masz alternatywę. – Mchl
alternatywy? Jeśli pytasz o decyzję dotyczącą innego typu bazy danych, odpowiedź brzmi - none ... :-( –
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