2011-09-24 41 views
0

我有慢查詢的問題,可能是我錯了,這是我想要的東西,最快的方式,以顯示MySQL數據庫記錄

我在與同一領域的一個頁面,顯示超過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); 

你認爲我錯了查詢的速度,或者你建議我另一種方式是比這些方法更快......

+0

謝謝大家...... –

回答

-2

而不是打印記錄,回去,並再次打印它們,將記錄放在一個大的字符串變量,然後回顯它爲每個下拉菜單。

$str = ""; 
while($row = mysql_fetch_assoc($rows)) { 
    // instead of echo... 
    $str .= [...]; 
} 
// now for each dropdown 
echo $str; 
// will print all the rows. 
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)循環。

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資源。