【发布时间】:2011-03-30 10:00:43
【问题描述】:
我需要检查我的数据库中是否已经有一些整数值(它一直在增长)。它应该在一个脚本中完成数千次。我正在考虑两种选择:
- 将所有这些数字从 MySQL 数据库读入 PHP 数组,每次需要检查时,使用 in_array 函数。
- 每次我需要检查数字时,只需执行 SELECT number FROM table WHERE number='#' LIMIT 1 之类的操作
一方面,在存储在 RAM 中的数组中搜索应该比每次查询 mysql 更快(正如我所提到的,这些检查在一个脚本执行期间执行了大约一千次)。另一方面,数据库正在增长,该数组可能会变得非常大,这可能会减慢速度。
问题是 - 在其他方面哪种方式更快或更好?
【问题讨论】:
-
数据库是为查询和搜索而构建的,有时它们也是缓存的RAM。 PHP 的数组函数擅长搜索,但与已编译的数据库引擎比不上。
-
您确实有内存限制,因此将所有内容放在数组中可能根本无法提供解决方案。如果您使用的是大型数据库,缓存是唯一的方法,但您确实需要首先确定可接受的数据新鲜度。
-
这个数据库表有多大? 10行? 1000 行? 1,000,000 行? 1,000,000,000 行? (答案将对最优策略产生巨大影响)......另外,你能“批量”这些数字吗(所以不是做 3000 个查询,而是每个查询 100 个数字只做 30 个)?
-
在那个大小下,两边都不是很清楚(一个 5000 行的 int 数组会占用相当多的内存,但不是一个荒谬的数量),并且数组操作的开销可能是由 TCP 开销抵消。所以我认为你是正确的,两者都差不多。多一点数据(比如 50k+ 行),数据库会更快。少一点(比如 1k 行),php 可能会更快。所以我不认为速度将是主要问题......
-
嗯,那也可能取决于脚本。通常,这取决于服务器上的内存限制以及脚本的使用位置。你能描述一些关于它的更多细节吗? 5k 对于数据库来说是一个很小的数字,即使它是 MySQL。另一方面,如果您的数据库服务器驻留在不同的机器上,这可能是个问题。我会使用 DB 解决方案,但会尝试优化查询数量。