http://www.securityandcaffeine.com/2008/04/03/php-mysql-and-mysql_fetch_array/
上面的文章让我感到惊讶。它说:
mysql_fetch_array()
- “1 - 使用引号!获得$result['2']
与$result[2]
相比的1/7时间”
知道这是否属实?
答案 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_assoc
或mysql_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倍于查找的长度,我不能说;我没有做过任何基准测试。然而,它更长的事实当然是合理的。是否真实?该文章的原始作者有责任支持这些主张。