显示mysql db记录的最快方法

时间:2011-09-24 03:12:55

标签: php mysql database

我的查询问题很慢,可能是我错了,这就是我想要的,

我必须在具有相同字段的单个页面上显示超过40个下拉列表,由db获取,但我觉得查询需要花费很多时间来执行并且还使用更多资源。

这是一个例子......

$sql_query = "SELECT * FROM tbl_name";
$rows = mysql_query($sql_query);

现在我使用while循环在下拉列表中打印该查询中的所有记录,

但是我必须在下一个下拉列表中重新打印相同的记录,最多40个列表,所以我使用

mysql_data_seek()移动到第一个记录,然后重新打印下一个列表,依此类推,直到40个列表。

但这对我来说似乎很慢,所以我使用第二种方法,就像所有40个列表的相同查询一样

$sql_query2 = "SELECT * FROM tbl_name";
$rows2 = mysql_query($sql_query2);

你觉得我对查询的速度有误吗,或者你是否建议我采用比这些方法更快的另一种方法....

3 个答案:

答案 0 :(得分:3)

尝试将行放入数组中:

<?php
$rows = array();

$fetch_rows = mysql_query("SELECT * FROM table");
while ($row = mysql_fetch_assoc($fetch_rows)) {
  $rows[] = $row;
}

然后只需在$rows循环中使用foreach ($rows as $row)数组。

答案 1 :(得分:0)

从MySQL结果资源中获取行会产生相当大的处理开销。通常,将结果作为数组存储在PHP中要快得多,而不是从RDBMS再次查询和获取相同的行集。

$rowset = array();
$result = mysql_query(...);
if ($result) {
  while ($row = mysql_fetch_assoc($result)) {
    // Append each fetched row onto $rowset
    $rowset[] = $row;
  }
}

如果您的查询返回大量行(数千或数万或数百万)并且您需要使用所有这些行,则可能会通过将所有行存储到PHP中的数组中来达到内存限制。在这种情况下,从MySQL中单独获取行可能更加内存保守,但它仍然可能会占用更多的CPU。

答案 2 :(得分:-2)

不是打印记录,返回并再次打印,而是将记录放在一个大的字符串变量中,然后为每个下拉列表回显。

$str = "";
while($row = mysql_fetch_assoc($rows)) {
    // instead of echo...
    $str .= [...];
}
// now for each dropdown
echo $str;
// will print all the rows.