简化方案:
考虑到上述情况,您会推荐以下哪种方法?
方法1 :只使用一个数据库查询将整个表选择为一个包含100,000行的大数组。使用循环,从阵列中挑选所需的300-400行并将其传递给前端。数据库服务器上的最小负载,因为它只是一个查询。在PHP上加载更多,因为它必须存储和搜索100,000个数组。
方法2 :使用循环,PHP将为每行所需数据生成一个新查询。收集所有数据将需要300-400个独立查询。服务器上的负载更多。与方法1相比,PHP上的负载较小。
意见/想法将不胜感激!
答案 0 :(得分:2)
100,000行是少量的。
您最好对数据库服务器进行微调。 所以我建议不要1也不要2。
只需:
SELECT * FROM `your_table` WHERE `any_field` = 'YOUR CRITERIA' LIMIT 300;
当您的数据超过1,000,000行时,您应该考虑强索引优化,也许您必须为复杂的选择创建存储过程。我保证在任何情况下都不是PHP的工作。
答案 1 :(得分:0)
正如您的问题来自Performance prospective,您的两种方法都会消耗一些资源。在这种情况下,我仍然会选择approach 1
,因为它不会一次又一次地查询数据库,如果您为每一行生成查询,即300-400个查询。在大型项目设计方面,数据库始终成为瓶颈。
老实说,两种方法都不好。良好的做法是拥有良好的数据库设计和查询选择。您尝试实现的目标可以通过合适的查询来完成。
答案 2 :(得分:0)
使用PHP循环数据实际上是一个坏主意,毕竟,数据库设计来执行查询。 PHP将需要遍历所有记录,并且不使用索引来加快速度;这大致相当于数据库中的“表扫描”。
为了从数据库中获得最大的性能,有一个好的设计和(例如)在正确的列上创建索引是很重要的。
另外,如果您还没有确定要使用哪种RDBMS,根据您的使用情况,某些数据库有更高级的选项可以帮助提高性能(例如PostgreSQL支持地理信息)
Pease提供一些实际数据(将存储哪种数据,哪种字段)以及需要执行的查询/过滤器类型的样本,以便人们能够为您提供实际答案,而非假设