2009-07-20 13 views

Odpowiedz

15

Zapisane procedury spowodują niewielki wzrost wydajności, ale głównie służą do wykonywania zadań, które są trudne lub niemożliwe do wykonania za pomocą prostego zapytania. Procedury przechowywane są świetne, aby uprościć dostęp do danych dla wielu różnych typów klientów. Administratorzy baz danych uwielbiają je, ponieważ kontrolują sposób korzystania z bazy danych, a nie pozostawiają deweloperom danych.

Spójrz na indeksy i odpowiedni projekt tabeli, aby uzyskać lepszą wydajność.

2

W MySQL lub innym serwerze SQL jako MSSQL lub Oracle, procedury przechowywane znacznie zwiększają szybkość zapytań, ponieważ są już skompilowane. Przechowywane procedury są bezpieczniejsze niż bezpośrednie zapytania, a jako obiekt w bazie danych mogą być administrowane przez właściciela, dając właściwy dostęp każdemu użytkownikowi.

Za pomocą procedur przechowywanych można również ukryć logikę zapytań i procedur oraz przekazać zespołowi programistów i innym programistom "czarną skrzynkę", w której wstawiają parametry i otrzymują wyniki.

Ostatecznie przechowywane procedury skał !!!!

z MySQL 5.1 Dokumentacja: procedury składowane mogą być szczególnie przydatne w pewnych sytuacjach:

Gdy wiele aplikacji klienckich są napisane w różnych językach lub pracy na różnych platformach, ale trzeba wykonać te same operacje bazy danych.

Gdy bezpieczeństwo jest najważniejsze. Banki, na przykład, wykorzystują zapisane procedury i funkcje dla wszystkich typowych operacji. Zapewnia to spójne i bezpieczne środowisko, a procedury mogą zapewnić, że każda operacja jest poprawnie rejestrowana. W takiej konfiguracji aplikacje i użytkownicy nie mieliby bezpośredniego dostępu do tabel bazy danych, ale mogą wykonywać tylko określone procedury przechowywane.

Zapisane procedury mogą zapewnić lepszą wydajność, ponieważ między serwerem a klientem musi zostać przesłanych mniej informacji. Kompromitacja polega na tym, że zwiększa to obciążenie serwera bazy danych, ponieważ więcej pracy wykonuje się po stronie serwera, a mniej po stronie klienta (aplikacji). Rozważ to, jeśli wiele komputerów klienckich (takich jak serwery WWW) jest obsługiwanych tylko przez jeden lub kilka serwerów baz danych.

Zapisane procedury pozwalają również na posiadanie bibliotek funkcji na serwerze bazy danych. Jest to cecha współdzielona przez nowoczesne języki aplikacji, które umożliwiają takie projektowanie wewnętrznie (na przykład przy użyciu klas). Korzystanie z tych funkcji językowych aplikacji klienta jest korzystne dla programisty, nawet poza zakresem korzystania z bazy danych.

+0

MySQL NIE kompiluje procedur przechowywanych przed ich wykonaniem w ustalonej sesji z aktualnej wersji –

2

Całkowicie uproszczona - Wydajność procedury zapisanej jest równa lub nieznacznie lepsza niż kod kosztem obciążenia serwera bazy danych. Ponieważ większość systemów db zajmuje się dostępem wielu użytkowników i używa sprzętu towarowego dla serwera bazy danych, przy użyciu funkcji odciążania kodu serwer bazy danych prawdopodobnie wygrywa. W przypadku serwerów klasy high end,> 4 rdzeni,> 32 GB, obciążenie SP często nie stanowi problemu.

Procedury przechowywane;

  1. przeniesienie mniej danych w zapytaniu - minimalna poprawa szybkości kodu dobrze napisany
  2. parsowania & buforowanie jest „nieco lepiej” - minimalna poprawa szybkości kodu dobrze napisany
  3. przesunąć obciążenie wykonanie do serwera db kontra klient (y) (serwery WWW), potencjalnie rozkładające obciążenie na wiele systemów. - poprawki prędkości są bardzo zależne od rzeczywistego kodu i ilości danych, w tym "nadwyżkowych" przesyłanych danych. Całkiem sporo kodu przenosi więcej danych niż jest w rzeczywistości używanych (biblioteki db, źle napisane zapytania, wybierz * itd.).

Nie optymalizuj wcześniej.

Procedury przechowywane mają wiele innych zalet niż szybkość, bezpieczeństwo na liście.

w jednym środowisku programatora, korzyści mogą być zrównoważone przez krzywą uczenia programowania SP, SP testowania ram, wielu metod kontroli rewizyjnej - SP i kodu, etc ..

uczenia się i za pomocą testów i profilowania ram będzie odpowiedz na to w sposób definitywny i poprowadzi Cię do zapewnienia lepszej "wydajności" Twojej aplikacji, niż po prostu wybierając zapytania SP lub ad-hoc.

Odpowiedź na pytanie "czy warto"? Jeśli nie masz ram testowania/profilowania, zgadujesz. Każda odpowiedź oparta na moim kodzie i sprzęcie jest prawdopodobnie nieistotna dla ciebie.

Moje prawdziwe doświadczenie w wielu aplikacjach internetowych Perl/TCL/PHP/C korzystających z przechowywanych procedur DB (Sybase, Oracle, MS SQL, MySQL, Postgres) NIE poprawia znacząco wydajności. Ale wciąż używam ich często, tylko z innych powodów niż wydajność. Mogą znacznie poprawić konkretną złożoną kwerendę, ale rzadko jest to większość kodu i ogólny czas przetwarzania.

8

Yikes Nie chciałbym, aby ktoś przeczytał te odpowiedzi i zrobił złe wrażenie. Istnieje kilka naprawdę ważnych różnic między implementacjami "Stored Whatever" w "MySQL" a "SQL server/Oracle".

Patrz: http://www.joinfu.com/2010/05/mysql-stored-procedures-aint-all-that/

Każda osoba, która zadaje to pytanie zakłada coś o realizacji procedury przechowywanej MySQL; niepoprawnie wierzą, że przechowywane procedury przechowywane są w pamięci podręcznej procedury składowania globalnego, podobnej do pamięci podręcznej procedur przechowywanych w Microsoft SQL Server [1] lub Oracle [2].

To jest złe. Niepoprawne wycofanie.

Oto prawda: Każde połączenie z serwerem MySQL utrzymuje własną pamięć podręczną procedur przechowywanych.

Poświęć chwilę, aby przeczytać resztę artykułu i komentarze. Jest krótki i będziesz miał o wiele lepsze zrozumienie problemów.

Powiązane problemy