mysql_data_seek与在数组中存储数据

时间:2012-06-01 21:42:07

标签: php mysql

我已经搜索了几个小时,但没有找到关于这个主题的内容。

我正在开发一个依赖于查询的网站来定义必须在页面上加载的元素。但是要组织数据,我必须重复4次查询结果。

首先尝试,我开始使用mysql_data_seek,以便我可以重新查询,但我开始失去性能。因此,我尝试将mysql_data_seek交换为将数据放入数组并运行foreach循环。

表现并没有以任何方式改善,所以我开始想知道哪个是最好的选择。构建一个相当大的数据数组,你执行多次mysql_fetch_array。

我的应用程序目前运行PHP 5.2.17,MySQL,一切都在本地主机中。不幸的是,我有一个繁忙的数据库,但从来没有遇到任何与它连接的问题。

是否有一些更好的方法来执行此任务?除了mysql_data_seek还是大数组数据之外还有其他选择吗?有没有关于这些选项的基准测试的一些信息?

非常感谢你的时间。

1 个答案:

答案 0 :(得分:1)

您的问题的答案可能在于索引数据库中的相应字段,大多数数据库也cache经常提供服务的查询,但一旦他们检查的表被更改,他们往往会丢弃它们。 (这很有意义)

所以你可以信任你的数据库来做它做得很好的事情:查询和检索数据并通过确保桌面上的争用和/或放置适当的indexes来帮助它。然而,这反过来会改变写入的性能,这在你的情况下可能并不重要,只有你真的可以判断。 (必须计算和保存索引)。

如果速度至关重要,那么您使用的PHP扩展也会发挥作用:“升级”到mysqlipdo并执行 - > fetch_all()因为它会减少php进程和数据库服务器之间的通信。反对这种情况的唯一原因是,如果您查询的数据量如此之大,以至于通过强制交换来停止或阻止您的php / webserver进程甚至整个服务器。

您使用的表类型可能很重要,某些类型的查询似乎在MYISAM上运行得更快,而不是INNODB。如果你想重新调整一下,那么你可以将这些数据(或它的副本)存储在mysql的HEAP engine中,所以只在内存中。如果您想要保留更改的数据,则需要小心将其与写入时的磁盘表同步。 (仅在服务器发生故障或关机的情况下)

或者,您可以使用memcache或使用apc_store来缓存您的数据,这应该非常快,因为它位于php进程内存中。这里最大的警告是APC通常可用于存储的内存较少。(默认为32MB)Memcache的主要优点是虽然仍然很快,但它是分布式的,所以如果你有多台服务器运行它们可以分享这些数据。

你可以尝试一个nosql数据库,最好是一个只是一个密钥库,甚至不是文档存储,例如redis

最后你可以在PHP脚本中对你的值进行硬编码,确保仍然使用类似eaccelerator或APC的东西,并确认你真的需要使用它们4次,或者你不能只是缓存输出无论你用它实际创造的是什么。

所以我很抱歉,我不能给你一个现成的答案,但在适用的情况下,表演问题通常需要采取多管齐下的方法。 : - |