每页一个查询 - 是不是很糟糕?

时间:2010-09-09 21:24:28

标签: php mysql optimization

我正在创建RPG类型的游戏。我通过JOIN从两个表中加载的每个页面中提取玩家的信息(这是关于成员的信息:年龄,姓名,他所有游戏的统计数据等),有时这些信息对我来说是必需的,有时根本不需要。两个表由~60-70行组成。这是一个例子:

$query = mysql_query("SELECT m.*, i.*
                        FROM members AS m
                        INNER JOIN information AS i
                        ON n.m_id = s.m_id AND n.secret_code= '$code' AND n.password = '$password'") 
                        or die(mysql_error());

我每页都运行此查询。我把这个查询放在header.php文件中,该文件包含在index.php文件中。我正在通过index.php文件执行所有操作,包括文件,如:

如果是页面index.php?id=gym我包含文件夹健身房及其所有文件。

你会建议我什么?重写所有系统并在每个文件中插入一个只会提取必要信息的查询?使用会话?但是,如果我购买两件物品,我怎么知道何时获得有多少会员有钱的数据呢?非常感谢你。

3 个答案:

答案 0 :(得分:3)

如果你有两张桌子并且大约有60-70行,那么很容易就会在内存中非常。它真的会给你带来任何痛苦吗?我看不出这会是一个什么问题,除非你得到一个大量的命中数,或者你是在一台微小的机器上运行你的数据库和站点。

答案 1 :(得分:2)

某些信息可以存储在会话中。非易失性的东西,如用户名,玩家/角色名等......这种情况不会经常发生变化。但是,当前得分,黄金/可用信用等等经常变化且应该保持一致的事情很可能每次都必须从数据库中提取。考虑如果他们打开两个浏览器窗口并在每个窗口中进行购物会发生什么。两者都说你有500金可用,两者都可能同时购买499金币。

但是,它归结为什么更快,真的。做一些基准测试,看看每次命中从数据库中提取60-70位数据是否比提取混合数据库/会话数据更快/更慢。

答案 2 :(得分:2)

每页单个查询实际上非常好 - 更复杂的网站/应用程序将包含多个请求。如果并不总是需要这些信息,您可以在每个页面的开头加入:

$require_lookup=false;

true - 取决于此次是否需要加载信息。这样可以在不需要时查看pags(可能是某些页面在游戏外 - 例如帮助页面)。

将这些数据存储在会话中,假设它们是基于文件的(您也可以获得数据库基础会话,这将使您回到起始位置)将简单地将内存约束从数据库移动到文件系统。最终,如果您的应用程序将变得流行,您将把数据库服务器与PHP服务器分离 - 甚至可能使用多个PHP服务器 - 这意味着基于文件的会话系统将不再起作用。

坚持你所拥有的 - 它现在可以正常工作。

相关问题