shuffle()函数会使查询更快吗?

时间:2012-08-16 09:13:45

标签: php

我有两个包含超过150000行数字的表,我有这段代码:

$q=$_GET["q"];
$negative = strlen($q);
$reverse = strrev($q);
while ($a = mysql_fetch_array($sql)) {
if (strlen($q) > 0)
  {
  $hint="";
  for($i=0; $i<count($a); $i++)
    {
    if ($reverse==substr($a[$i],-$negative,strlen($q)))
      {
      if ($hint=="")
        {
        $hint=$a[$i];
        }
      }
    }
  }
echo $hint . "\t";
}

这个查询需要27秒才能返回结果,我想要将所有结果洗牌,但是当我添加shuffle()函数时,这样:

while ($a = mysql_fetch_array($sql)) {
shuffle($a);

性能发生了惊人的变化,现在返回结果只需要两秒钟,而且我尝试了很多次也是如此。 这会更快吗?

2 个答案:

答案 0 :(得分:4)

mysql_fetch_array返回一个包含数字和字符串键的数组,因此它是一个关联数组,需要对所有查找进行散列处理。 shuffle丢弃所有密钥,将其转换为索引数组,可以更有效地访问它。

请注意,执行此操作时,混洗行对于返回的每个列有两个元素,一个来自数字键,另一个来自命名键。您应该使用mysql_fetch_rowmysql_fetch_array($sql, MYSQL_NUM)来防止此问题。如果你这样做,那么没有shuffle的代码也会很快。

答案 1 :(得分:1)

绝对不是。您的SQL服务器可能会缓存结果,因此第二次更快。