哪个更快?

时间:2010-12-20 07:15:30

标签: php mysql optimization query-optimization performance

我今天正在和一位朋友聊聊增加页面的加载时间,他告诉我“mysql_num_rows”已经过时并需要花费很多时间。

用下面的代码替换mysql_num_rows会更快吗?

$query      =   mysql_query("SELECT COUNT(*) FROM sent_messages WHERE  from_sender = '".$_SESSION['id']."'") or die(mysql_error()); 
$result     =   mysql_fetch_array($query);
$count      =   $result['COUNT(*)'];

我对时间复杂度和算法知之甚少,所以任何建议都会受到高度赞赏。

由于

2 个答案:

答案 0 :(得分:4)

mysql_num_rows()不老,但速度较慢,因为它需要在客户端和数据库之间传输更多数据。如果您需要读取数据并对其进行计数,mysql_num_rows()是不可替代的。如果你需要的只是一个记录数,我推荐这种方式:

$query  = mysql_query("SELECT COUNT(*) FROM sent_messages WHERE  from_sender = '".$_SESSION['id']."'") or die(mysql_error());
$count  = mysql_result($query,0);

答案 1 :(得分:2)

Māris Kiseļovs' answer涵盖了这里。但是,我只想添加以下内容以避免混淆:

通常,尽可能多地在数据库/查询中执行。即,不要仅仅为了在PHP(或任何其他语言)中执行计算和转换而获取大量数据。始终只寻求从DB请求您所需的内容,从而最大限度地减少数据交换。

在这种特定情况下,您最好使用COUNT(*)mysql_result()方法;在DB层执行计算,只请求所需的数据(记录数)。

然而,你是否也要列出记录(即,显示计数迭代记录集)你应该做一个正常的{{1获取记录(以生成列表)并在此结果集上执行SELECT ... FROM ...(以获取计数)。在这种情况下,单独的mysql_num_rows()查询不会有任何好处,因为无论如何您都需要来自数据库的整个结果集。