使用Where子句的M​​ysql Rank会更快?

时间:2014-07-16 02:29:03

标签: php mysql

我有一个包含8.000.000行的数据库,有2列'id'和'得分',我也知道得分= 0的用户的确切数量(即接近4.000.000)。

我的网页上有一个排名板,其中包含查询:

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

$num_rank定义了哪个页面显示,每页有25个用户。

查询有效,它显示了它必须显示的内容,但问题是查询真的很慢。

问题是下一个查询可能更快?:

$num_users_score_0 = 4000123

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"**  
}

所有建议都很赞赏!

感谢!!!

1 个答案:

答案 0 :(得分:2)

是的,你的查询会更快,第一次改进:`order by是不必要的:

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

此外,table(score, id)上的索引会更快。实际上,使用此索引,您可以使用原始查询。