我今天正在和一位朋友聊聊增加页面的加载时间,他告诉我“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(*)'];
我对时间复杂度和算法知之甚少,所以任何建议都会受到高度赞赏。
由于
答案 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()
查询不会有任何好处,因为无论如何您都需要来自数据库的整个结果集。