2013-05-02 36 views
4

Hej伙计,性能:存储一个大的mysql结果类变项VS结果数组

我想知道什么是更快。建议我们有一个大约50列的数据库表和一个处理这些列的类。

类的构造函数加载所有字段 - 这里开始我的问题。

将每一列存储在自己的类变量中还是非常有用? 在这种情况下,我已经有一个数组,例如$结果哪些键是表列。

或者这是不相干的?

我试图编写一个基准,但我只有一个vServer来测试,所以结果不是很清楚。

是一次性函数,它将类的变量中的值存储得更快,然后为每个'get'方法搜索整个数组?

感谢提前:)

附: PHP 5

+0

仅供参考,你不需要编写一个函数来存储结果到一个对象中 - 只需在调用PDOStatement :: Fetch时指定PDO :: FETCH_CLASS' – 2013-05-02 12:02:18

+0

嗯,我正在使用自定义的mysqli类。我还创建了不同的mysql表的类,例如员工,项目等。不知道这会做什么。 我的问题是,它是否有用的结果存储在类变量形式eployee或存储数组。 例如'employee :: $ id,employee :: $ name vs employee :: $ result ['id'],employee :: $ result ['name']'(没有这些字段不公开,只是一个例子),因此得到一个对象我colud使用mysqli_fetch_object;) – mercsen 2013-05-02 12:06:45

回答

3

我认为你的问题的答案是“它并不重要”。

就应用程序性能而言,您所谈论的代码 - 遍历内存循环50次,处理内存中的数据,检索类数据或从关联数组中检索数据 - 非常快。在一般情况下,测量差异几乎是不可能的。为了注意employee::$id, employee::$nameemployee::$result['id'], employee::$result['name']之间的任何区别,您必须处理极端情况 - 例如,数百万列的结果数组。请参阅this基准。另一方面,从设计角度来看,存在一些折衷 - 通过将结果映射到类变量,可以隐藏业务逻辑,并创建一致的接口。例如,如果您的员工类需要根据数据库字段monthly_salary计算annual_salary,则可以创建另一个名为“annual_salary”的类变量,并且客户端代码始终保持一致 - 它是employee::annual_salaryemployee::monthly_salary,而不是employee::result['monthly_salary']employee::annual_salary

+0

所以我认为我并不真正mater。我也没有公共字段,所有内容都封装在类中,只能通过get/set方法访问。但基准很好,似乎不是一个很大的差异。在这种情况下,将所有类存储在类变量中会降低性能,因为我存储了两次。非常感谢 – mercsen 2013-05-02 12:37:31