2014-07-16 2 views
1

J'ai une base de données avec 8.000.000 lignes, avec 2 colonnes 'id' et 'score', je sais aussi le nombre exact d'utilisateurs avec score = 0 (c'est près de 4.000.000).Mysql Rank avec une clause Where sera plus rapide?

J'ai une carte de classement dans ma page web avec la requête:

"SELECT id, score FROM table ORDER BY score DESC LIMIT ".$num_rank.", 25" 

$num_rank définit qui montrent la page, et il est 25 utilisateurs par page.

La requête fonctionne, et elle montre ce qu'elle doit montrer mais le problème est que la requête est vraiment lente.

La question est la question suivante peut être plus rapide ?:

$num_users_score_0 = 400

if(score==0){ 
$num_rank=$num_rank-$num_users_score_0 
query=**"SELECT id, score FROM table WHERE score = 0 ORDER BY score DESC LIMIT ".$num_rank.", 25"** 
}else{ 
query=**"SELECT id, score FROM table WHERE score > 0 ORDER BY score DESC LIMIT ".$num_rank.", 25"** 
} 

Toutes les suggestions sont appreciatted!

Merci !!!

Répondre

2

Oui, vos requêtes seront plus rapides, avec une amélioration à la première: la `commande par est inutile:

query="SELECT id, score FROM table WHERE score = 0 LIMIT ".$num_rank.", 25" 

De plus, ce sera plus rapide avec un index sur table(score, id). En fait, avec cet index, vous pourrez peut-être utiliser votre requête originale.

+0

Merci beaucoup! – etrull