Pierwszych 10 sposobów na MySQL



Pierwszych 10 sposobów na MySQL

Często bywa tak, że “wąskim gardłem” aplikacji webowych staje się baza danych. Oczywiście można w takich przypadkach rozważać zakup lepszego serwera, a nawet utworzenie dedykowanej instancji dla bazy danych (co może być słuszne w części przypadków), jednakże dobrze jest się zastanowić, czy jest coś co możemy zrobić, by zmniejszyć obciążenie bazy danych bez konieczności wydawania kolejnych środków.

Dzisiejszy artykuł jest pierwszym z dwóch wpisów przedstawiających proste i bezbolesne techniki optymalizujące, dotyczące relacyjnej bazy danych MySQL.

1. Stałe połączenia

Połącz się raz i utrzymuj połączenie by uniknąć zbędnych narzutów związanych z rozłączaniem i ponownym łączeniem się do bazy danych. Dla języka PHP na przykład:

  1. mysql_pconnect($server['host'], $server['username'], $server['password'])

2. Dobieraj typ indywidualnie do każdego pola

Zawsze dobieraj typ pola tak by odzwierciedlał dane jakie będą w nim zawarte. Czy na pewno potrzebujesz int(11) dla pola id? Zastanów się czy w polu “plec” naprawdę potrzebujesz typu text i wartości mężczyzna i kobieta, czy nie lepiej nadać typ bool i w komentarzy na pisać 0 – kobieta, 1 – mężczyzna? Z pewnością zaoszczędzi co to sporo RAM-u podczas wykonywania zapytania do bazy danych.

3. Analizuj tabele

Po utworzeniu tabeli i po wypełnieniu jej zestawem danych dobrze jest przeprowadzić operacje analizowania tabeli, co pozwoli MySQL-owi lepiej optymalizować tabele.

4. Czy moja tabela jest za długa?

Jeżeli zadajesz sobie to pytanie tylko dlatego, że w tabeli użytkowników masz już “za dużo” kolumn, to odpowiedz brzmi nie. Nie należy sztucznie dzielić tabel (jeżeli nie ma takiej potrzeby). Największe obciążenie jest w momencie wyszukiwania pierwszego bajtu tabeli.

5. Nie używaj pętli jeżeli nie ma takiej potrzeby

Jeżeli masz zestaw konkretnych id krotek, które chcesz pobrać z bazy danych to nie pobieraj ich pojedynczo w pętli, skoro możesz wykorzystać procedurę IN.

  1. SELECT *
  2. FROM `my_users`
  3. WHERE `id` IN (1,5,15,45);

6. Definiuj wartości domyślne

Podczas tworzenia tabeli pamiętaj by zadeklarować domyślne wartości pól gdzie to jest tylko możliwe. W ten sposób podczas wykonywania zapytania nie musisz podawać wszystkich wartości pól, ponieważ jak ich nie podasz zostaną tam wstawione wartości domyslne, skracając tym samym czas potrzebny na sparsowanie tegoż zapytania.

7. Dane użytkownika

Jeżeli często potrzebujesz danych użytkownika i z jakiegoś powodu nie możesz ich przetrzymywać w sesji po zalogowaniu, zastanów się czy zamiast za każdym razem wykonywać zapytanie do tabeli użytkowników, nie przetrzymać tych danych w tabeli MEMORY

8. Sumy i liczniki

Często używając takich polecen jak SUM czy COUNT dobrze jest stworzyć osobną tabelę, którą system będzie uaktualniał z każdym dodanym wierszem (np. komentarzem). W ten sposób nie będziesz musiał wywoływać czasochłonnego zapytania na tabelę w której znajduje się duża liczba komentarzy, a jedynie wywołamy proste zapytanie do tabeli z licznikiem.

9. LIMIT 1 przy unikatowych wierszach

Zdarza się tak, że tworząc zapytanie dokładnie wiemy, że dostaniemy pojedynczy rekord – w takich sytuacjach dodanie LIMIT 1 potrafi zwiększyć wydajność zapytania. W takim przypadku silnik bazodanowy przestanie szukać po pierwszym znalezionym elemencie, nie marnując zasobów na przeszukiwanie dalszej części tabeli

10. Używaj INDEX-u na polach po których przeszukujesz

Jeżeli w tabeli (szczególnie dużej) znajdują się pola, po których przeprowadzasz wyszukiwanie, pamiętaj by nadać im atrybut INDEX. Dzięki takiemu rozwiązaniu zapytania mogą się wykonywać od kilku razy szybciej.

Naprawdę tak niewiele potrzeba żeby zwiększyć wydajność bazy danych, mam nadzieję, że wskazówki się przydadzą. W kontynuacji wpisu przedstawię kolejnych 10 sposobów na MySQL-a, które z pewnością warto znać.

Related Posts with Thumbnails
Prześlij dalej:
Digg Google Bookmarks reddit Mixx StumbleUpon Technorati Yahoo! Buzz DesignFloat Delicious BlinkList Furl

6 komentarzy do “Pierwszych 10 sposobów na MySQL”

commenter

Dzięki za tricki – naprawdę niektóre pomocne i czekam na kolejne:)

wow, jesteś prawdziwym mysql-owym ninja :D

commenter

Ad 8. Warto dodać, że do takiego triku warto zastosować wyzwalacze, żeby w bazie nie zrobił się bałagan.
Można też do tego zastosować widoki i je zindeksować – to chyba najszybszy sposób.

Ad 1. W PHP (chociaż w innych językach oczywiście też) istnieją obiekty do łączenia się z bazami danych.Korzystajmy z nich! Same dbają o utrzymanie łączności z bazą danych.

P.S. Czy mógłbyś poświęcić jakiś artykuł tabeli MEMORY? Po co jest i jak dokładnie działa? Szczerze mówiąc nie słyszałem wcześniej o niej.

commenter

re: Ad1. Obiekty faktycznie istnieją i dobrą praktyką jest z nich korzystać, lecz zawsze należy brać pod uwagę skalę aplikacji. A sposób miał za zadanie jedynie podkreślenie wagi stałego połączenia.

re: Ad. 8 oczywiście, że można, chociaż nie zawsze mamy dostęp do triggerów ponieważ komercyjne serwery często najnormalniej w świecie ich nie wspierają (np. nazwa.pl, home.pl) – jednakże uwaga słuszna

a propos MEMORY – to wpisane na moją listę to-dosów :)

Pierwszych 10 sposobów na MySQL 10 głosuj! Artykuł jest pierwszym z dwóch wpisów przedstawiających proste i bezbolesne [...]

Zostaw komentarz:

Imię (wymagane):
Email:
Strona www:
Komentarz (wymagany):
XHTML: W komentarzach możesz korzystać z nastepujących tagów: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
-