【发布时间】:2016-10-28 15:58:29
【问题描述】:
我有一个包含数百万条记录的数据库。 该表的结构如下:
表名:记录
归档1:名称(varchar)(主键)
字段2:记录(int/bigint)
示例:
姓名 |记录
达林 | 256
亚伦 | 3
达里尔 | 12
...
我需要知道名为“namex”的用户在排序记录中的位置。
目前我实现了这个解决方案:
...
$name=namex;
$query= mysqli_query($mysqli,"SELECT Name FROM record ORDER BY Record DESC");
$x=0;
$rank=0;
if ($query->num_rows > 0) {
// output data of each row
while($row = $query->fetch_assoc()) {
if($row["Name"]==$name){
$rank=$x+1;
echo "Rank : $rank<br>";
break;
}
$x++;
}
}
...
有了它和数据库中的 100 万条记录,答案大约会在 4 秒内出现。
我尝试在字段 Record 上放置表索引,但性能保持不变。
如何减少执行时间?
【问题讨论】:
-
SELECT COUNT(Name) as Rank from record WHERE Name <= $name也许...当然你需要参数化查询以防止SQL注入的风险 -
你真的应该使用
where子句。从字面上看,您的行为相当于开车去沃尔玛,购买商店的整个库存,将它们全部带回家,然后挑选并扔掉除了您想要的巧克力棒之外的所有东西。 -
@MarkBaker 除了他有 ORDER BY Record,而不是 Name
-
谢谢,我解决了:mysqli_query($mysqli,"SELECT COUNT(Name) as rank FROM record Where Record >= '$record'");
-
看起来不错。但是如果两个用户的“记录”值相同呢?
标签: mysql sql performance