成都公司:成都市成華區(qū)建設(shè)南路160號1層9號
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓
當(dāng)前位置:工程項目OA系統(tǒng) > 泛普各地 > 江西OA系統(tǒng) > 鷹潭OA > 鷹潭網(wǎng)站建設(shè)公司
PHP/MYSQL 查詢大數(shù)據(jù)
PHP:PHP 5.3.6 (cli) (built: Jun 15 2011 16:29:50)
MYSQL:5.1.51
若是我們有的一張表有幾百萬或幾千萬的記載,我們要運用 PHP 將一切的記載都獲取過來(遍歷數(shù)據(jù)表)進(jìn)行處置。查詢句子:

SELECT * FROM largetable;
PS:為了證明上面的做法是最佳的方法,我測驗運用 largetable 中的一個字段做 where ,以及 LIMIT,OFFSET 。上面那種 WHERE 取得成果很慢,固然用了索引。后邊這種 LIMIT 可以讓你有一種想死的覺得(有愛好可以了解下,《分頁優(yōu)化》)。
以 MYSQL 以及PDO_MYSQL 為例,測驗直接運用以下代碼,必然會呈現(xiàn)超內(nèi)存的狀況:
$result = mysql_query($sql);
while ($rowset = mysql_fetch_assoc($mysql)) {
...
$stmt = $dbh->prepare($sql);
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT)) {
...
緣由在于在查詢履行后,PHP 的MYSQL、PDO_MYSQL 將查詢成果悉數(shù)緩存到了客戶端,也就是 PHP 履行地點機(jī)器上。這樣若是我們要 SELECT * FROM LARGETABLE 查詢的記載在 百萬以上的時分 ,緩存的成果就會非常大,超出 PHP 運用內(nèi)存。所以為了防止這樣狀況就需要封閉客戶端的緩存。
這里供給二個測驗?zāi)_本,分別為 MYSQL、PDO_MYSQL 封閉緩存后查詢樣例。點擊下載:mysql_query
以下是 PDO_MYSQL 在查詢 ~100W 以及 ~200W (540M)數(shù)據(jù)成果(由于我的 PHP 內(nèi)存運用設(shè)置了1G所以沒掛:) )
可以很明顯的看出在緩存成果后占用內(nèi)存驚人…,當(dāng)我們處置千萬數(shù)據(jù)的時分必掛。
以下是 PDO_MYSQL 封閉緩存查詢 ~200W 的數(shù)據(jù)成果。這下處置千萬以及E級的數(shù)據(jù)的時分,對內(nèi)存表明很淡定。
PS:若是你要處置的數(shù)據(jù)就幾十萬,你仍是調(diào)大點內(nèi)存好了。比方 MYSQL:
mysql_unbuffered_query() 的優(yōu)點是有價值的:在 mysql_unbuffered_query() 回來的成果集之上不能運用 mysql_num_rows() 和 mysql_data_seek()。此外在向 MySQL 發(fā)送一條新的 SQL 查詢之前,必須提取掉一切未緩存的 SQL 查詢所發(fā)生的成果行。
本站推薦
- 1《PHP項目跟蹤管理系統(tǒng)操作流程指南:高效管理項目進(jìn)度與團(tuán)隊協(xié)作的實用手冊》
- 2使用ThinkPHP框架構(gòu)建高效學(xué)生管理系統(tǒng)的獨特優(yōu)勢與實際應(yīng)用價值
- 3試用PHP軟件項目管理工具:優(yōu)化項目流程,提高團(tuán)隊協(xié)作效率的絕佳選擇
- 4php生產(chǎn)制造物料管理系統(tǒng)源碼含詳細(xì)注釋與高效功能示例
- 5php采購倉庫管理系統(tǒng)助力企業(yè)高效庫存管控與采購流程優(yōu)化
- 6PHP打造超實用商品庫存管理系統(tǒng),高效管控庫存不是夢!
- 7php庫存管理系統(tǒng)論文:實現(xiàn)高效庫存管控的技術(shù)方案剖析
- 8php庫存管理系統(tǒng)源碼含詳細(xì)注釋與功能擴(kuò)展教程
- 9php庫存管理系統(tǒng)教程:從搭建到高效應(yīng)用全

