在数据库中获取5,000个记录提取ID,您认为哪个查询更快?
使用php循环访问5000个ID,并为每个ID执行SELECT查询,
foreach($ids as $id){
// do the query
$r = mysql_query("SELECT * FROM TABLE WHERE ID = {$id}");
}
或收集数组中的所有ID,并使用SELECT * FROM TABLE WHERE ID IN(1到5000)
//assuming $ids = array(1,2 ---- up to 5000);
$r = mysql_query("SELECT * FROM TABLE WHERE ID IN (".join(",",$ids).")");
答案 0 :(得分:4)
选项2肯定会更快。 5000个单独的数据库查询将产生巨大的网络连接开销。
答案 1 :(得分:4)
毫无疑问,一次加载它们会更快。运行5,000个查询会慢得多,因为每个查询都会带来一定的开销。
另外,为了加快速度,请不要使用*运算符!选择您要使用的字段,如果您只需要ID列,请指定此字段!如果您想要所有列,请全部指定,因为您可能稍后添加字段,而无需检索此新字段。
答案 2 :(得分:2)
最快的方法是不要求5000行 你几乎不需要100个就可以在一个页面上显示它们。 5000是过度杀伤
答案 3 :(得分:0)
当然可以衡量一下,但我当然建议让数据库完成这项工作。 一切都取决于,我希望你不是为每个电话创建一个连接。
答案 4 :(得分:0)
如果使用绑定变量使用查询语句,循环会更快。在循环中声明语句;然后在循环内部为每个id绑定变量。
不要低估进入SQL解析的时间;特别是在这些长篇大论的事情上。
答案 5 :(得分:0)
选项2更快。使用选项1,您可以在每次迭代时对服务器进行完整的舍入。
我要指出,在这种情况下,您可以考虑使用分页来显示数据。
提示:测量,测量,测量。使用价值10分钟的代码,您将立即获得答案。
答案 6 :(得分:0)
对于许多查询来说哪个更快? 尝试测量它,例如:
<?php
$start = getmicrotime();
for ($i=0;$i<100000;$i++)
{
foreach($ids as $id){
// do the query
$r = mysql_query("SELECT * FROM TABLE WHERE ID = {$id}");
}
}
$end = getmicrotime();
echo 'Time (1): '.($end- $start).' sec';
$start = getmicrotime();
for ($i=0;$i<100000;$i++)
{
//assuming $ids = array(1,2 ---- up to 5000);
$r = mysql_query("SELECT * FROM TABLE WHERE ID IN (".join(",",$ids).")");
}
$end = getmicrotime();
echo 'Time (2): '.($end- $start).' sec';
?>