Mysql和php:查询数据库vs.读取整个东西


mysql and php: querying the db vs. reading in the whole thing

我正在努力解决一个关于PHP数据库编程的哲学问题。特别是,当我需要数据时,我试图决定何时最好将整个表读入对象,而不是直接查询MySQL。

是否有这样一种情况,你只想把整个数据库读入一个对象?你的底线在哪里?

例如,如果我有一个充满姓名和电话号码的表,并且我需要获得一个人的电话号码,这是一个简单的一次性mysql查询。将整个表读入关联数组只是为了得到一个电话号码听起来很荒谬……但是:

(1)如果我需要得到50个人的姓名和电话号码该怎么办?100年?1000年?

(2)什么时候把整个表读入一个对象更有效?在1000个名字上执行1000个mysql查询是否总是比在整个表中读取更有效?

(2a)显然,这取决于表中记录的总数。对1000个电话号码进行1000次查询,或者从MySQL中读取2000条记录的表到关联数组中会更好吗?如果总共有5000条记录,而我需要1000条呢?如果是一万呢?等等。

(3)如果我需要做一些更复杂的事情,比如返回特定区号内的所有电话号码,该怎么办?显然,在这种情况下,我可以使用一个正则表达式SQL查询,但我相信我可以想出一个更复杂的情况下,一个简单的查询不能给我确切的我想要的。

我想我的意思是,作为一个开发人员,你有几个旋钮可以优化你的应用程序。显然,您需要考虑正在使用的数据,并优化数据库模型以匹配将要执行的数据请求类型。但有时你会遇到一个互斥的情况,你被迫为一个场景优化你的数据模型,以牺牲另一个竞争场景为代价。

任何想法吗?

数据库的设计是为了高效地定位和返回特定操作所需的准确数据。

通过网络连接传输数据比在数据所在的机器上处理数据要慢几个数量级。使用数据库做他们擅长的事情……保存大量信息,并允许应用程序代码在给定时间点查询和处理所需的数据子集。

如果你发现你需要频繁地访问相同的数据一遍又一遍,缓存它在应用层或专用的缓存解决方案,如memcached是有意义的,但我无法想象一个场景,它是有意义的只是读取整个表,因为我的应用程序逻辑需要处理的行和/或列的子集在表

(3),但我相信我可以想出一个更复杂的情况下,一个简单的查询不能给我确切的我想要的。

这通常表明您的数据库没有正确规范化和/或存在设计缺陷。

(2)什么时候把整个表读入一个对象更有效?在1000个名字上执行1000个mysql查询总是

都不是一个好的选择。SQL用于基于集合的操作。您确实需要正确地使用系统才能使其正常工作,但要做到这一点,您必须正确设计数据库。最好的方法是编写一个查询,它返回您想要的记录,不多也不少。

如果我需要得到50个人的姓名和电话号码该怎么办

也许可以使用select * where ID in (1,2,3,...,50),如果你有更多的用户,也许可以创建一个包含你想要的用户列表的临时表,并在上面进行连接。对于设计合理的数据库,通常有一个很好的方法可以通过单个查询检索一组数据。