Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Który sposób wybrać?
Forum PHP.pl > Forum > Bazy danych > MySQL
Albitos
Pytanie czysto teoretyczne do raczej zaawansowanych winksmiley.jpg. Co będziesz najszybszym sposobem na jednoczesne pobranie danych i zliczenie zwróconych rekordów?

Wersja pierwsza:
  1. SELECT SQL_CALC_FOUND_ROWS * FROM messages WHERE unread='F' AND owner=$id LIMIT 10
  2. SELECT FOUND_ROWS()


Wersja druga:
  1. <?php
  2. $result = mysql_query('SELECT * FROM messages WHERE unread='F' AND owner='.$id.' LIMIT 10')
  3. $numrows = mysql_num_rows($result);
  4. ?>


Na mój rozum przy FOUND_ROWS() mysql bierze na siebie zliczenie wybranych rekordow, natomiast w przypadku mysql_num_rows() php licza otrzymaną liczbę wierszy (raczej będzie to robiło wolniej niż mysql, ale czy na pewno?). Za moim rozumowaniem wydaje się stać fakt, że przy pobieraniu danych z mysql'a za pomocą mysql_unbufered_query() mysql_num_rows() podaje błędny wynik (wg manuala). Czy ktoś może potwierdzić moje domysły? Może ktoś zna jakieś artykuły o zaawansowanej optymalizacji zapytań mysql czy kodu php? Mile widziane jakieś ciekawe źródła wiedzy, których nie znam. Cora ciężej jest znaleźć coś nowego, a nadal sporo rzeczy pozostaje nieodkrytych (o referencji w foreach nawet manual nic nie mowi...)
SongoQ
Cytat
Na mój rozum przy FOUND_ROWS() mysql bierze na siebie zliczenie wybranych rekordow, natomiast w przypadku mysql_num_rows() php licza otrzymaną liczbę wierszy (raczej będzie to robiło wolniej niż mysql, ale czy na pewno?).
Sprawdz a przekonasz sie.

Na to akurat bym takiej wagi w strojeniu zapytan nie zwracal bo to nie wplywa na pogorszenie czasow. Odnosnie samego procesu optymalizacji jest wiele ksiazek, podejrzewam ze do MySQLa nie ma wiec musisz szukac w takich bazach jak MSSQL lub ORACLE.
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.