关于使用SESSION变量进行MySQL查询的想法?

时间:2014-11-04 16:18:11

标签: php mysql session

只是好奇其他人对此的看法。无论你得到什么,都会欣赏意见或事实:)

我正在开发一个应用程序,其中从MySQL中提取大量信息并在多个页面上需要。

对......更有意义吗?

  1. 将所有数据拉入并将其存储在SESSION变量中以在其他页面上使用

  2. 在需要它的每个新页面上从数据库中提取数据

  3. 我认为首选方法是#1,但是使用SESSION变量“太多”可能有一些缺点?

    副问题有点相关:就URL而言,最好是将数据存储在其中(即domain.com/somepage.php?somedata=something&otherdata=thisdata)或使用SESSION变量存储该数据所以URL可以保持一般/干净(即domain.com/somepage.php)?

    两者都可能是有问题的,但任何可能的见解都会受到赞赏。

    谢谢!

3 个答案:

答案 0 :(得分:3)

你的问题无法回答,答案适用于所有地方。

原因如下:许多Web服务器架构在同一台机器上处理HTTP服务器(Apache,Nginx),服务器端语言(PHP,Ruby,Python)和RDBMS(MySQL,PostgreSQL)。

这是您可以找到的最常见的设置之一。

现在,这就是你的场景中发生的事情:

  • 您连接到MySQL - 您从PHP>建立连接; MySQL和“花费”一点点
  • 您请求数据,因此MySQL从硬盘驱动器中读取数据(除非缓存在RAM中)
  • PHP获取数据并分配一些内存来保存信息
  • 现在将其保存到会话中。但默认情况下,会话是基于磁盘的,因此您只需执行写入操作,并且至少花费了1次硬盘驱动器的I / O操作

但是让我们看看发生了什么 - 你将一些数据从磁盘(MySQL)移动到RAM(PHP变量),然后再将其保存在磁盘上。

在这种情况下你真的没有帮助自己或你的系统,发生的事情是你把事情做得更慢。

另一方面,PHP(和其他语言)能够维护与MySQL(和其他数据库)的连接,因此它们可以最大限度地降低打开新连接的成本(这在宏观方案中确实很便宜)。 / p>

如您所见,这是一种情况。在某种情况下,您可以在专用计算机上使用HTTP服务器,在专用计算机上使用PHP,在专用计算机上使用MySQL。问题是,再次将数据从MySQL移动到PHP会话会更便宜。该会话基于磁盘,基于redis,基于memcache,基于数据库?建立与MySQL的连接的成本是多少?

在任何你能想象到的情景中你需要问什么 - 你在做什么交易以及什么

因此,如果您运行最常见的设置(PHP和您的数据库在同一台机器上) - 答案是否定的,那么在会话中存储一些MySQL数据并不是更好。 如果您使用InnoDB(并且您可能正在使用)并且如果它已正确优化,则将一些数据保存到会话以避免查询数据库中读取的明显开销将不会产生好处。它很可能恰恰相反。

答案 1 :(得分:1)

将它放入会话几乎总是一个可怕的想法。除非你已经用尽所有其他选择,否则它甚至不值得考虑。

以下是解决这些问题的方法:

  • 评估您是否可以执行任何操作来简化您正在运行的查询,例如减少您获取的列。而不是SELECT *尝试SELECT x,y,而这些是您需要的唯一列。
  • 使用EXPLAIN查找查询占用时间过长的原因。寻找任何简单的胜利,例如添加索引
  • 检查您的MySQL服务器是否已正确调整。默认配置非常糟糕,一些简单的单行修复可以显着提升性能。
  • 当且仅当您尝试了所有这些内容并且无法再挤出任何性能时,您希望尝试缓存结果。

你只需要锁定缓存,因为缓存是最难解决的问题之一。

您可以使用MemcachedRedis之类的内容作为预先获得结果的更快存储空间。它们旨在自动使不再使用的缓存数据失效。

使用$_SESSION的原因是一个坏主意,因为一旦数据被放入其中,很少有人花时间在以后正确地删除数据,从而导致会话不断增长。如果您关注效果,请尽量缩小会话次数。

答案 2 :(得分:-1)

想想你的用户(客户端电脑)。会话需要一些空间给用户的pc,会话可能会丢失,可能在关闭页面后,或复制链接并将其粘贴到其他浏览器。上帝在那里练习我认为只是使用查询,但注意一些事情,尝试尽可能减少页面中的查询数量,这会减慢你的网站。