何时使用$ sth-> fetchrow_hashref,$ sth-> fetchrow_arrayref和$ sth-> fetchrow_array?

use*_*979 10 perl dbi

我知道:

  • $sth->fetchrow_hashref 从数据库返回获取的行的hashref,
  • $sth->fetchrow_arrayref 从数据库返回获取的行的arrayref,和
  • $sth->fetchrow_array 从数据库返回获取的行的数组.

但我想知道有关这些的最佳实践.我们什么时候应该使用fetchrow_hashref?什么时候应该使用fetchrow_arrayref?什么时候应该使用fetchrow_array?

Eth*_*her 11

当我写YAORM为$工作,我为基准所有这些在我们的环境(MySQL的),发现数组引用执行相同的阵列,并hashref是很多慢.所以我同意,最好尽可能使用数组*; 它有助于使您的应用程序知道它正在处理哪些列名称.您获取的列越少越好,因此请尽量避免使用SELECT *语句 - 直接进行操作SELECT <just the field I want>.

但这仅适用于企业应用程序.如果您正在做一些非时间关键的事情,请选择以您最容易使用的格式呈现数据的任何形式.请记住,在您开始优化应用程序之前,效率是程序员最快的,而不是机器.您需要花费数百万次执行应用程序才能节省比编写代码所花费的时间更多的时间.


Ed *_*ess 3

你可能会比阅读gmaxDBI 食谱更糟糕。

除其他外,它指出:

当您的结果集通过 JOIN 具有一个或多个同名列时,就会出现问题。在这种情况下,arrayref 将报告所有列,甚至不会注意到存在问题,而 hashref 将丢失附加列

  • 另一方面,将数组与“select * from table where id = "blah"”之类的东西结合使用的陷阱意味着您受到数据库和其中表的顺序的支配。像 DBA 在表中间添加新列这样简单的事情就会改变数组,而 hashref 会忽略它。 (3认同)