1

简化场景:

  1. 我有一张大约有 100,000 行的表。
  2. 我需要根据某些标准选择大约 300-400 行,以便在网页上显示它们。

考虑到上述情况,您会推荐以下哪种方法?

方法 1:仅使用一个数据库查询将整个表选择为一个 100,000 行的大数组。使用循环,从数组中挑选所需的 300-400 行并将其传递给前端。数据库服务器上的最小负载,因为它只是一个查询。将更多负载放在 PHP 上,因为它必须存储和搜索 100,000 个数组。

方法 2:使用循环,PHP 将为所需数据的每一行生成一个新查询。收集所有数据将需要 300-400 次独立查询。服务器上的负载更大。与方法 1 相比,PHP 的负载更小。

意见/想法将不胜感激!

4

3 回答 3

2

100,000 行对于 MySQL rdbms 来说是很小的数量。

您最好对数据库服务器进行微调。所以我不推荐1也不推荐2。

只是:

SELECT * FROM `your_table` WHERE `any_field` = 'YOUR CRITERIA' LIMIT 300;

当您的数据超过 1,000,000 行时,您应该考虑强索引优化,也许您必须为复杂的选择创建一个存储过程。我向你保证,无论如何它都不是 PHP 的工作。

于 2013-02-02T08:05:34.230 回答
0

使用 PHP 循环遍历数据确实是个坏主意,毕竟数据库是为执行查询而设计的。PHP 将需要遍历所有记录,并且不使用索引来加快速度;这大致相当于数据库中的“表扫描”。

为了从您的数据库中获得最大的性能,重要的是要有一个好的设计并(例如)在正确的列上创建索引。

此外,如果您还没有决定要使用什么 RDBMS,根据您的使用情况,一些数据库有更高级的选项可以帮助提高性能(例如 PostgreSQL 支持地理信息)

Pease 提供一些实际数据(将存储什么样的数据,什么样的字段)和需要执行的查询/过滤类型的样本,以便人们能够给你一个实际的答案,而不是假设

于 2013-02-02T08:18:38.730 回答
0

正如您从性能方面提出的问题,您的两种方法都会消耗一些资源。在这种情况下,我仍然会选择approach 1,因为它不会一次又一次地查询数据库,如果您为每一行生成查询,即 300-400 个查询。在大型项目设计中,数据库总是成为瓶颈。

老实说,这两种方法都不好。良好的数据库设计和查询选择是一种很好的做法。您试图实现的目标可以通过适当的查询来完成。

于 2013-02-02T08:07:32.307 回答