2010-12-20 6 views
1

Je parlais aujourd'hui avec un ami de l'augmentation du temps de chargement des pages et il m'a dit que le "mysql_num_rows" est vieux et prend beaucoup de temps.Lequel est le plus rapide?

Remplacer les mysql_num_rows par le code ci-dessous serait-il plus rapide? Je ne connais pas trop la complexité temporelle et les algorithmes, donc tout conseil serait grandement apprécié.

Merci

Répondre

4

mysql_num_rows() n'est pas vieux, mais il est plus lent, car il nécessite plus de données transférées entre le client et la base de données. mysql_num_rows() est irremplaçable si vous avez besoin de lire les données et de les compter. Je recommande cette façon, si tout ce que vous avez besoin est un nombre d'enregistrements:

$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 couvre le sol ici. Cependant, je veux juste ajouter ce qui suit afin d'éviter toute confusion:

En générale, essayer de faire autant de travail dans la DB/requête possible. Par exemple, ne récupérez pas beaucoup de données uniquement pour effectuer des calculs et des transformations en PHP (ou dans tout autre langage). Toujours chercher à ne demander que ce dont vous avez besoin de la base de données, minimisant ainsi l'échange de données.

Dans ce cas précis vous serez mieux lotis avec l'approche COUNT(*) et mysql_result(); effectuer les calculs dans la couche DB, en ne demandant que les données nécessaires (le nombre d'enregistrements).

Cependant, vous listait les dossiers aussi (c.-à-présentant le nombre et itérer sur l'ensemble des dossiers), vous devez simplement faire une SELECT ... FROM ... normale pour récupérer les enregistrements (afin de générer la liste) et faites mysql_num_rows() sur cet ensemble de résultats (afin d'obtenir le compte). Dans ce cas, il n'y aura pas de gain dans une requête distincte SELECT COUNT(*) ... puisque vous avez besoin de toute l'ensemble des résultats de la base de données.

+0

Très bien. Je suis curieux cependant. Combien plus rapide est la méthode suggérée que mysql_num_rows? – Lance

+0

@Lance Vous me dites. Cela dépend vraiment de la taille de la table, de la complexité de la requête et de la pertinence/existence des index. Vous devriez essayer et le temps ... avec des données réalistes. – jensgram

Questions connexes