Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP || MySQL] Optymalizacja
Forum PHP.pl > Forum > PHP
MySQL
To o co mi chodzi podam na przykladzie.

Wersja MySQL + funkcje PHP
  1. <?php
  2. $ip = $_SERVER['REMOTE_ADDR'];
  3.  
  4. $sql = 'SELECT *
  5. FROM tabela
  6. WHERE t_ip = '.ip2long($ip);
  7. ?>


czy tez:
wersja MySQL
  1. <?php
  2. $ip = $_SERVER['REMOTE_ADDR'];
  3.  
  4. $sql = 'SELECT *
  5. FROM tabela
  6. WHERE t_ip = INET_ATON(''.$ip.'')';
  7. ?>


Wynik oczywiscie bedzie ten sam, chodzi tylko o to co jest szybsze? Ingerencja w zapytanie funkcji z PHP czy tylko funkcje MySQL'a jezeli tylko jest to mozliwe? Takich przykladow oczywiscie mozna mnozyc zwlaszcza przy funkcjach dotyczacych daty i czasu.
Ja niestety nie mam jak tego sprawdzic bo mam za mala baze ale moze ktos z was kiedys wykonal takie testy i doszedl do jakis wnioskow?
ddiceman
1. Nie bedzie ten sam, bo ip2long() zwraca wartosc znakowana (signed) a INET_ATON bezznakowa (unsigned) i trzeba ja zrzutowac sprintf('%u', ip2long($ip)); - co zreszta jest napisane w dokumentacji
2. pierwszy wariant prawdopodobnie szybszy, bo IP jest konwertowane na pewno tylko raz a nie dla kazdego rekordu tabeli
3. zasadniczo jezeli mozna do zapytania SQL wpisac wczesniej wyliczona wartosc to bedzie to szybsze, niz uzywanie funkcji MySQL w zapytaniu. O ile w powyzszym pytaniu nie jest to trywialne, bo MySQL moze zoptymalizowac zapytanie i wartosc wyliczyc tylko raz, to na pewno zwroc uwage na roznice miedzy
  1. <?php
  2. $sql = 'SELECT * FROM tabela WHERE INET_NTOA(t_ip) = "'.$ip.'";';
  3. ?>

a
  1. <?php
  2. $sql = 'SELECT * FROM tabela WHERE t_ip = INET_ATON("'.$ip.'");';
  3. ?>
okitoki
a na t_ip masz założony index ?
MySQL
Cytat(okitoki @ 28.04.2009, 09:34:19 ) *
a na t_ip masz założony index ?

Nie

ddiceman czy drugi Twoj przyklad bedzie szybszy? Tak mnie sie wydaje chociaz jeszcze nigdy nie pisalem warunkow WHERE w takie sposob jak Twoj pierwszy przyklad.
okitoki
oprócz optymalizacji zapytań, bardzo ważna jest optymalizacja bazy, na tych polach gdzie będziesz często używał jakiś warunków czy na polach po których będziesz grupował powinny być indexy. odpowiednio ustawione indexy potrafią nieraz przyśpieszyć odpowiedź SQL-a z kilku minut na kilka sekud (to wszystko zależy od ilości rekordów oczywiście)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.