
Przeprowadziłem kilka testów szybkości odczytu z pliku i tabel typu: MEMORY, MyISAM.
Jak był przeprowadzany test:
Test przeprowadzałem na Ubuntu Dapper (apache2, php5.1.x, MySQL 5.0.22) na laptopie, więc wiele rzeczy mogło wpłynąć na na nieprawidłowość testów.
Test podzieliłem na kilka etapów:
- z włączonym cache zapytań
- z wyłączonym cache zapytań
- z pomiarem połączenia z bazą danych
Odnośnie ilości wywołań testu, to był wykonywany 1000 razy, liczone były pojedyńcze czasy testu, a następnie sumowane i liczona z tego średnia testu. Jako danych testowych użyłem wygenerowanego ciągu znaków o długości około 65 KB.
Wyniki:
Odczyt z pliku:
Do odczytu z pliku użyłem funkcji: file_get_contents()
Średni czas odczytu jaki uzyskałem to: 0.000357507705688 (szczegółowe informacje)
Odczyt z bazy danych:
Do odczytu z bazy użyłem funkcji mysql_* (połączenie, wybór bazy, wykonanie zapytanie i zwrócenie rekordu). Tabela zawierała 1 rekord z id i polem w którym był zapisany taki sam ciąg znaków jak w przypadku pliku. Dlaczego nie więcej? Chciałem wyeliminować czas jaki będzie potrzebny na przeliczenie jaki rekord ma zostać zwrócony.
Wyłączony zapis cache w MySQL i czas połączenia z bazą pominięty:
Tabela MyISAM - średni czas to: 0.00516110825539 (szczegółowe informacje)
Tabela MEMORY - średni czas to: 0.00368802952766 (szczegółowe informacje)
Widać, że odczyt z pliku ma przewagę nad odczytem z bazy danych, a czasy odczytu z tabel typu MyISAM i MEMORY są bardzo do siebie zbliżone.
Włączony zapis cache w MySQL i czas połączenia z bazą pominięty:
Tabela MyISAM - średni czas to: 0.00179107260704 (szczegółowe informacje)
Tabela MEMORY - średni czas to: 0.000719551563263 (szczegółowe informacje)
Z włączonym cache zapytań widać, że czasy są zbliżone do odczytu z pliku.
Włączony zapis cache w MySQL + czas połączenia z bazą danych:
Tabela MyISAM - średni czas to: 0.00202487516403 (szczegółowe informacje)
Tabela MEMORY - średni czas to: 0.00205611944199 (szczegół?owe informacje)
Kluczowym znaczeniem jest czas połączenia z bazą danych a porównanie tych 2 testów zapytań do bazy danych można powiedzieć, że są prawie identyczne.
Różnice w wydajności pomiędzy MyISAM i MEMORY?
Typ tabeli MEMORY będzie lepszy zawsze, kiedy operujemy na pewnym zestawie rekordþw i nie musimy jak w przypadku MyISAM odczytywac z dysku, który jak wiadomo ma fizyczne ograniczenia, które są nie do przeskoczenia.
Polecam zapoznanie się z art. http://dev.mysql.com/tech-resources/articles/mysql_5.0_psea2.html, w którym autor porównał różne typy tabel.
Popularne
- Doda i Nergal - Jak to odbiorą fani zespołu Behemoth?
- Koncert Rammstein - Katowice / Spodek
- Symfony - przyśpieszanie Propela z wykorzystaniem widoków (view) baz danych
- Symfony, Propel, PostgreSQL - Multi database (obsługa wielu baz danych w aplikacji)
- Gentoo - Instalacja PostgreSQL 8.3.x i PHP
- Social Media jednak nie dla wszystkich, na przykładzie SuperExpress.
- pgAdmin v1.10.0 released
- Symfony - Propel Lazy Load
