php session vs mysql speed

时间:2010-02-23 07:46:54

标签: php mysql

我正在使用权限系统。在每个页面中,它将需要检查用户是否具有这样做的权限。我有两个选择,将数据存储在会话变量中(仅在登录期间更新)或每次查询数据库以获取信息。 哪个更快?

我意识到如果权限发生变化,我将需要更新会话变量,因此用户需要重新登录以“查看”权限的变化,但这不是决策中的因素,只有速度是。< / p>

4 个答案:

答案 0 :(得分:7)

会话速度与数据库的速度取决于许多因素:

  • 会话变量
  • 中将存储多少数据
  • 会话变量的实际后备存储是什么(如果它是数据库支持的会话,它将基本上是同一时间)

我可以说,对于少量数据,基于文件的会话变量将比DB访问更快。

您需要对其进行测量以获得应用程序中两种方法之间的相关比较。我个人怀疑,如果不采用会话解决方案会产生这样的差异。

答案 1 :(得分:3)

会话中设置新值:

时间:0.00062895秒

数据库中插入相同的值:

时间:0.00000811秒

Cookie

中插入相同的值

时间:0.00000906秒

或者您可以使用以下代码进行测试:

$before = microtime(true);
    // Put your code here
$after = microtime(true);
$Speed = number_format(( $after - $before), 8);

echo "<h1>Time:  " . $Speed . " Seconds</h1>";

答案 2 :(得分:1)

我会在会话中存储这类信息:

  • 该数据特定于当前用户
  • 每个用户都有自己的数据版本
  • 这种数据不太可能经常更改 - 这意味着等到会话到期并且用户回来时通常都可以
    • 如果您认为它会经常更改,您可以在会话中保留一些时间戳以及该数据,以跟踪最后一次从数据库中提取的“时间”;如果它已被“太久以前”取出,只需每隔几分钟重新拍摄一次。


我还要补充一点,如果有一天你开始有几个不同的网络服务器,你将能够使用memcached存储会话数据 - 这意味着它比数据库更好地扩展。

答案 3 :(得分:0)

简短回答:将它存储在会话变量中可能会快一点,因为您已经从数据库中填充了它。话虽如此,我怀疑单个简单数据库查询的速度会以任何真正可衡量的方式使您陷入困境。