2010-12-20 14 views
1

Ich plauderte heute mit einem Freund über die Ladezeit von Seiten und er erwähnte, dass die "mysql_num_rows" alt ist und viel Zeit braucht.Was ist schneller?

Würde das Ersetzen der mysql_num_rows mit dem unten stehenden Code schneller sein?

$query  = mysql_query("SELECT COUNT(*) FROM sent_messages WHERE from_sender = '".$_SESSION['id']."'") or die(mysql_error()); 
$result  = mysql_fetch_array($query); 
$count  = $result['COUNT(*)']; 

Ich weiß nicht viel über Zeit Komplexität und Algorithmen, so dass jeder Rat sehr geschätzt werden würde.

Dank

Antwort

4

mysql_num_rows() ist nicht alt, aber es ist langsamer, weil es mehr Daten zu übertragen zwischen Client und Datenbank erfordert. mysql_num_rows() ist unersetzbar, wenn Sie Daten lesen UND zählen müssen. Ich empfehle diese Art und Weise, wenn alles, was Sie brauchen eine Anzahl von Aufzeichnungen ist:

$query = mysql_query("SELECT COUNT(*) FROM sent_messages WHERE from_sender = '".$_SESSION['id']."'") or die(mysql_error()); 
$count = mysql_result($query,0); 
2

Māris Kiseļovs'answer den Boden hier abdeckt. Allerdings möchte ich nur folgendes hinzuzufügen, um Verwirrung zu vermeiden:

Im Allgemeinen, versuchen, so viel Arbeit in die DB/Abfrage wie möglich zu tun. Das heißt, holen Sie nicht viele Daten, nur um Berechnungen und Umwandlungen in PHP (oder einer anderen Sprache) durchzuführen. Versuchen Sie immer, nur das anzufordern, was Sie benötigen, und minimieren Sie so den Datenaustausch.

In diesem speziellen Fall werden Sie mit der COUNT(*) und mysql_result() Ansatz besser dran sein; Ausführen der Berechnungen in der DB-Schicht, wobei nur die benötigten Daten angefordert werden (die Anzahl der Datensätze).

jedoch, waren Sie die Datensätze aufzulisten, zu (dh präsentiert die Zählung und über den Satz von Datensätzen Iterieren) sollten Sie nur einen normalen SELECT ... FROM ... tun, um die Datensätze zu holen (um die Liste zu erzeugen,) und tun mysql_num_rows() auf diesem Ergebnissatz (um die Anzahl zu erhalten). In diesem Fall gäbe es in einer separaten SELECT COUNT(*) ... Abfrage keinen Gewinn, da Sie ohnehin das gesamte Ergebnisset aus der DB benötigen.

+0

Großartig. Ich bin aber neugierig. Wie viel schneller ist die vorgeschlagene Methode als mysql_num_rows? – Lance

+0

@Lance Du sagst es mir. Es hängt wirklich von der Tabellengröße, der Komplexität der Abfrage und der Relevanz/Existenz von Indizes ab. Sie sollten es versuchen und zeitlich ... mit realistischen Daten. – jensgram