php - 使用 php 和 mysql 构建网站的更有效方法(兑现还是查询?)

标签 php mysql performance

背景:

我刚刚开始学习 PHP 来创建一个网站来显示 mysql 数据库中保存的投注程序的用户数据。

相关程序(用 python 编写的 IRC 投注机器人客户端)最初使用 .csv 文本文件数组来保存用户数据。然而我意识到这种数据存储方法确实不可扩展,并且在内存中保存了大量数据(因此需要大量文件写入和平面文本文件搜索)。

我重新实现了程序以使用 mySQL 数据库。我目前正在重写该网站。

对于每个用户,我为存储的每个变量查询一次 mySQL 数据库是否最好(因此需要数百个查询来构建用户列表页面)?或者我应该查询数据库一次,但将数据放入数组中,然后从该数组中挑选出我需要显示的变量?因此只查询一次,但在内存中保存更多数据并进行更多基于服务器的处理。

当前可以在这里找到原始网站(仍然可以使用 text.csv 文件):http://xcoins.co.uk (不过,这很快就会更新为基于 mysql 的版本(希望如此))

问题:

如果每个用户获取大量数据并使用 php 对其进行排序以显示按值排序的用户列表(查询返回的一些数据可能会被丢弃或可能被缓存),那么是否更好地查询 mySQL 数据库。或者我应该多次查询数据库以获取页面上所需的每个用户数据变量,但因此它只会获取所需的数据(但需要发送和接收大约 100 个查询才能显示单个用户列表页面) ?

通常可以接受多少个查询来显示包含大量数据的单个网页?

最佳答案

常见的方法是检索给定页面所需的尽可能多的信息(但不能更多),并使用此结果集来填充页面。

因此,要创建“客户资料”页面,您可以运行如下查询:

select p.name, 
       p.address, 
       sum(t.amount) as balance
from   profile p, 
       transactions t
where  p.id = ?
and    p.id = t.id

(对过时的连接语法表示歉意 - 旧习难改)。

这将为您提供一个 PHP 结果集,您可以将其打印到页面的适当位置。

当然,通常您无法在单个查询中检索所需的所有数据,要么是因为没有自然联接(例如,显示系统上的事件用户数量),要么是出于性能/复杂性原因。在这种情况下,您需要为这些数据元素编写单独的查询。

您可能想看看 PHP 框架,它为您抽象了很多这样的东西。

关于php - 使用 php 和 mysql 构建网站的更有效方法(兑现还是查询?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32713231/

相关文章:

php - 向Mysql数据库中插入数据时出错

php - 删除 PHP 中的调试消息

javascript - 通过 onclick 事件将 json 编码的多维数组传递给 javascript

sql - 如何提高sqlite like语句的性能

performance - 使GO(GOLANG)逐行解析文本更快

css - CSS中带引号和不带引号的属性选择器的区别

php - PHP 生成的 JSON 文件具有 application/octet-stream mime 类型

php - 比较具有不同键名的两个数组

php - 在 PHP 中存储文件结构

mysql - 使用 PhpMyAdmin 将多个 CSV 文件合并到一个数据库中