MySQL查询行的最快方法

时间:2017-10-30 08:13:31

标签: php mysql

我的问题是我还没有一台好的服务器来测试它,但我想知道它是否更快使用:

$sqlgetg = "SELECT assignments.id FROM assignments LEFT JOIN userassignments ON assignments.id = userassignments.assignmentid WHERE userassignments.userid = '" . $row['id'] . "' AND userassignments.assignmentid = '" . $assignmentid . "'";

$sqlgetg = "SELECT NULL FROM assignments LEFT JOIN userassignments ON assignments.id = userassignments.assignmentid WHERE userassignments.userid = '" . $row['id'] . "' AND userassignments.assignmentid = '" . $assignmentid . "'";

因为我必须检查是否有分配ID为x的用户的分配?我不需要其他任何东西,但是: if(mysqli_num_rows($ resultgetg)> 0)?在这两种情况下,phpMyAdmin都给了我想要的行号。 (我查了一下  没有WHERE,它仍然有效。)

修改 I don't know how and why NULL works but it does...

2 个答案:

答案 0 :(得分:1)

如果您只想计算返回的行数SELECT NULLSELECT 42或其他什么,您可以从表格中选择任何静态值。但是你的两个策略实际上都不是最理想的,因为它们需要服务器不必要的工作和不必要的网络流量以及你只打算丢弃的结果集的不必要的处理。

如果您想要计算行数,那么实际上就是。您应SELECT COUNT(*) AS how_many_rows ...并让服务器对行进行计数,并返回包含计数的单个列(“how_many_rows” - 构成您自己的别名)的单行。

答案 1 :(得分:0)

我已经在我的i7-4720HQ笔记本电脑上使用三星EVO 850在我的本地主机上测试了这个。使用WAMP-stack,phpMyAdmin并测试查询

$starttime = microtime(true);

$sqlgetg = "SELECT userassignments.id FROM userassignments";
$resultg = mysqli_query($db, $sqlgetg);

$endtime = microtime(true);
$duration = $endtime - $starttime;

echo $duration;

here中的PHP脚本!)

具有20'000行和5列的表的结果显示了使用assignments.id的0.00021秒的平均速度和带有NULL的0.00020sec ...所以即使我有100'000'000行,差异也会有只差0.1秒。