mysql_fetch_array()引用增加速度?

时间:2012-07-05 13:57:58

标签: php mysql

http://www.securityandcaffeine.com/2008/04/03/php-mysql-and-mysql_fetch_array/

上面的文章让我感到惊讶。它说:

  

mysql_fetch_array() - “1 - 使用引号!获得$result['2']$result[2]相比的1/7时间”

知道这是否属实?

3 个答案:

答案 0 :(得分:5)

这似乎完全基于误解。看到这个引用,突出我的:

  

1 - 如果您引用这些值,则会浪费速度,但不要使用引号。根据Reinhold Weber的博客:#17: $row[’id’]$row[id]快7倍。” 如果你这么做的话,经常......哎哟。

是的,$row['id']$row[id] 更快,因为$row[id]是语法错误,它会尝试解析常量,然后将其转换为字符串,并抛出一个同时注意。$row[1]$row['id']都是有效,并且应该执行非常相同的操作。如果查找数字索引和查找字符串索引之间存在差异,那么它必须非常小,以至于不值得花时间。

PHP数组实际上没有位置键但是全部关联的启示......并不是真正的新闻,因此没有广泛的速度问题。事实上,这个快速基准测试显示“数字字符串”索引很容易是所有这些索引的最慢查找:http://codepad.org/aeNJ2u3O

无论如何,您应该使用mysql_fetch_assocmysql_fetch_row,它们分别为您提供命名(字符串索引)或未命名(数字索引)数组。使用_fetch_array可以获得两者,通常是不必要的。

如果您需要真实的性能数据,请根据您的使用情况对其进行基准测试。

答案 1 :(得分:4)

基于这句话:

  

获得$ result ['2']的时间的1/7与$ result [2]相比。

高度怀疑这是正确的,没有任何理由,特别是考虑到该文章链接到另一个人(不存在)博客作为参考。

为什么呢?因为在内部,PHP uses hashtables用于数组。 Kendall Hopkins的回答很好地解释了实施:

  

PHP数组是一个链式哈希表(在键上查找O(c)和O(n)   允许int和字符串键的冲突。它使用2种不同的   散列算法使这两种类型适合相同的散列密钥空间。   此外,存储在散列中的每个值都链接到存储的值   在它之前和(链表)之后存储的值。它还有一个   临时指针,用于保存当前项目的哈希值   可以迭代。

因此,除非有基准证明int和字符串键的两个独立哈希算法的性能差距为7倍,否则这篇文章是无意义的。

答案 2 :(得分:3)

哦,小伙子...... PHP确实是一种灾难性的语言。

当您将MySQL结果作为组合的关联/正常数组拉出时,您实际获取的是一个关联数组,其中一些键是数字索引。

因此,任何查找都是键查找。

$result[2]$result["2"]之间的区别在于PHP需要在第一个实例中将整数2转换为字符串"2",以便它可以使用它是查找的关键。

转换是否需要6倍于查找的长度,我不能说;我没有做过任何基准测试。然而,它更长的事实当然是合理的。是否真实?该文章的原始作者有责任支持这些主张。