我有两个包含超过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);
性能发生了惊人的变化,现在返回结果只需要两秒钟,而且我尝试了很多次也是如此。 这会更快吗?
答案 0 :(得分:4)
mysql_fetch_array
返回一个包含数字和字符串键的数组,因此它是一个关联数组,需要对所有查找进行散列处理。 shuffle
丢弃所有密钥,将其转换为索引数组,可以更有效地访问它。
请注意,执行此操作时,混洗行对于返回的每个列有两个元素,一个来自数字键,另一个来自命名键。您应该使用mysql_fetch_row
或mysql_fetch_array($sql, MYSQL_NUM)
来防止此问题。如果你这样做,那么没有shuffle的代码也会很快。
答案 1 :(得分:1)
绝对不是。您的SQL服务器可能会缓存结果,因此第二次更快。