0

我有两个超过 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);

性能变化惊人,现在只需要两秒钟就可以返回结果,我试了很多次都是一样的。它变得更快吗?

4

2 回答 2

4

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

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

于 2012-08-16T09:33:34.717 回答
1

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

于 2012-08-16T09:17:23.000 回答