PHP MySql使用变量声明查询性能

时间:2012-09-21 15:57:41

标签: php mysql

好吧 - 这可能是一个愚蠢的问题,但我对完美的渴望激励着我,所以,如果它是愚蠢无意义的,请告诉我。

我有一个mysql查询,我从数据库表中获取行,并且我需要以我收集的所有列的某种形状或形式的值。请看下面的示例代码(这可以使用数组来收集输出 - 基本问题应该是相同的):

$query="SELECT A,B,C,D FROM table1 WHERE 'X'='Y'";
$result=mysql_query($query,$resource);
while($row=mysql_fetch_assoc($result)){
   $var1=$row['A'];   $var2=$row['B'];

   echo '<li class="' . $row['C'] . '" id="' . $row['D'] . '">';
}

我的问题如下:

我只需要$ row ['A']和$ row ['B'],因为在这种情况下它们对于每一行都是相同的值,但我确实需要它们一次。其他值对于每一行都是不同的,我也需要它们,如示例所示。

在整个循环中连续设置变量是否有问题?或者使用if(!isset ......更好吗?还是有其他方法可以做到这一点?或者表现是如此微不足道,以至于使这个问题无关紧要?

由于

4 个答案:

答案 0 :(得分:1)

为什么不在循环外设置变量。

$result=mysql_query($query,$resource);
$result_new = mysql_fetch_assoc($result);
$var1 = $result_new['A']; //considering $result_new['A'] always exists 
$var2=$result_new['B']; //considering $result_new['B'] always exists
while($row=$result_new){ 
echo '<li class="' . $row['C'] . '" id="' . $row['D'] . '">';
}

答案 1 :(得分:1)

真的不要理会。除非你循环数百万条记录。

如果您需要更高的速度,请不要在while循环中回显:

 $result=mysql_query($query,$resource);
    $string ='';
if ($result) {
$row=mysql_fetch_assoc($result);
$string .= '<li class="' . $row['C'] . '" id="' . $row['D'] . '">';
$var1=$row['A'];
$var2=$row['B'];

    while($row=mysql_fetch_assoc($result)){

    $var1=$row['A']; $var2=$row['B'];
    $string .= '<li class="' . $row['C'] . '" id="' . $row['D'] . '">';
    }
   }
    echo $string;

还有两件事。不要使用mysql_ *:不鼓励使用此扩展名!

并且(就像我以为别人说过的话)如果a / b总是一样的话,你应该重新考虑你的数据库结构。

编辑: 为您的问题提供真实的答案: 我做了一个小测试。 在每个循环上设置值(1,000次)需要0.00027s。如果已经设置了值,则在循环内部检查需要0.00030s。所以每次设置它都比检查更快。

答案 2 :(得分:1)

  1. 这种情况下的性能影响是无关紧要的,事实上我会猜测if(isset..)警卫是否会花费更长的时间 - 只有我能想到的情况,这个问题在哪里重要将是一种情况您将(较大的)对象或数组分配给$var1并以某种方式强制php制作副本而不是参考

  2. 如果由于审美原因而困扰你(我可以联系;)),你可以使用do-while循环:

    //assuming you always get at least one result
    $result=mysql_query($query,$resource);
    $row=mysql_fetch_assoc($result);
    $var1=$row['A'];   $var2=$row['B'];
    
    do {
      // the loop stuff - stringify or echo the list
    } while ($row=mysql_fetch_assoc($result)) ;
    

答案 3 :(得分:1)

你可以用do-while表达式

来做
$query="SELECT A,B,C,D FROM table1 WHERE 'X'='Y'";
$result=mysql_query($query,$resource);
if($row=mysql_fetch_assoc($result)) {
    $var1=$row['A'];   $var2=$row['B'];
    do {
        echo '<li class="' . $row['C'] . '" id="' . $row['D'] . '">';
    } while($row=mysql_fetch_assoc($result));
}