簡體   English   中英

一次將所有SQL查詢提取到一個數組中?

[英]Fetch all SQL query into an array at a time?

好吧,下面的php代碼成功添加了url字段中的所有行。

$sql = "SELECT * FROM table WHERE url <> ''";
$result = mysql_query($sql,$con);
$sql_num = mysql_num_rows($result);

while($sql_row=mysql_fetch_array($result)) 
{
    urls[] = $sql_row["url"];
}

問題是如果url列表是數百萬,那么它需要花費很多時間(特別是在localhost中)。 所以,我想知道如何在不使用循環的情況下將sql查詢結果直接導入數組。 可能嗎?

你應該考慮使用mysqli來達到這個目的。 fetch_all()方法允許這樣做。

http://php.net/manual/en/mysqli-result.fetch-all.php

UPDATE

根據評論,我嘗試了兩種方法。 我嘗試在一個循環中使用mysql_fetch_array ,並使用mysqli::fetch_all()方法,在我們生產的大型表上。 mysqli::fetch_all()使用的內存更少,運行速度比mysql_fetch_array循環更快。

該表有大約500000行。 mysqli::fetch_all()在2.50秒內完成加載數組中的數據,並沒有達到腳本中設置的1G內存限制。 在3.45秒后, mysql_fetch_array()因內存耗盡而失敗。

問題不在於循環,而在於您將數百萬條數據(可能很大)從數據庫傳輸到內存中。 無論你采取哪種方式,都需要時間。 無論如何,有人需要在某個地方循環。

簡而言之:減少從數據庫中獲取的數據量。

不推薦使用mysql ,您可以在mysqliPDO找到所需的功能。 這是切換到更新的MySQL擴展的完美借口。 對於mysqliPDO ,方法是fetchAll (注意mysqli::fetch_all需要運行mysqlnd驅動程序)。

在mysql中沒有它的選項。 雖然你可以使用pdo的fetchall()

http://php.net/pdostatement.fetchall

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM