新聞中心
如何解決PHP查詢大量數(shù)據(jù)內(nèi)存耗盡的問題
這個(gè)意味著PHP腳本使用了過多的內(nèi)存,并超出了系統(tǒng)對其設(shè)置的允許最大內(nèi)存。解決這個(gè)問題,首先需要查看你的程序是否分配了過多的內(nèi)存,在程序沒有問題的情況下,你可以通過一下方法來增加PHP的內(nèi)存限制(memory_limit)。
創(chuàng)新互聯(lián)建站是一家以成都網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、品牌設(shè)計(jì)、軟件運(yùn)維、成都網(wǎng)站推廣、小程序App開發(fā)等移動(dòng)開發(fā)為一體互聯(lián)網(wǎng)公司。已累計(jì)為成都自拌料攪拌車等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開發(fā)服務(wù)。
我給你個(gè)思路,利用游覽器的刷新機(jī)制,每執(zhí)行10秒刷新一下自動(dòng)更新下一串?dāng)?shù)據(jù),一串多少數(shù)據(jù),看你的SQL效率而定。就這樣一直刷新更新,到結(jié)束為止。
你用網(wǎng)頁的方式,讓人點(diǎn)擊,服務(wù)器采集,簡直是弱爆了。每個(gè)人的點(diǎn)擊循環(huán)1000次,來個(gè)100人同時(shí)點(diǎn),你要用的是普通的虛擬機(jī)就不行了。最好是換種方式實(shí)現(xiàn),不要通過網(wǎng)頁進(jìn)行采集。
而且如果使用mysql的話,它也有一個(gè)超時(shí)時(shí)間,運(yùn)行一串代碼時(shí)間如果超過配置文件的時(shí)間,會(huì)被中斷不運(yùn)行。第一種你可以修改php配置文件timeout的運(yùn)行時(shí)間,第二你可以分批處理大量數(shù)據(jù),注意是分批處理,就OK了。
使用緩存,比如memcache,redis,因?yàn)樗鼈兪窃趦?nèi)存中運(yùn)行,所以處理數(shù)據(jù),返回?cái)?shù)據(jù)非???,所以可以應(yīng)對高并發(fā)。
php查詢大數(shù)據(jù)很慢.怎么回事.才100多萬
1盡量使用數(shù)字型字段,若只含數(shù)值信息的字段盡量不要設(shè)計(jì)為字符型,這會(huì)降低查詢和連接的性能,并會(huì)增加存儲(chǔ)開銷。這是因?yàn)橐嬖谔幚聿樵兒瓦B接時(shí)會(huì)逐個(gè)比較字符串中每一個(gè)字符,而對于數(shù)字型而言只需要比較一次就夠了。
沒必要一次性查出100W條。每次請求3-5W數(shù)據(jù)update,分頁用遞歸??刂坪米兞績?nèi)存,不要內(nèi)存溢出。
PHP的查詢?nèi)笔∧J绞蔷彌_模式。也就是說,查詢數(shù)據(jù)結(jié)果會(huì)一次全部提取到內(nèi)存里供PHP程序處理。這樣給了PHP程序額外的功能,比如說,計(jì)算行數(shù),將指針指向某一行等。更重要的是程序可以對數(shù)據(jù)集反復(fù)進(jìn)行二次查詢和過濾等操作。
你的查詢需求中,最常用的where字段是什么,然后在數(shù)據(jù)表中給這個(gè)字段建立索引。多表查詢、嵌套查詢的話,就得優(yōu)化sql了,這個(gè)得具體情況具體分析了。
php頁面寫的sql語句怎么優(yōu)化?寫了條查詢語句,但數(shù)據(jù)太多,導(dǎo)致頁面響應(yīng)...
1、這樣的話,緩存表,只有你在更新網(wǎng)站內(nèi)容的時(shí)候進(jìn)行更新,比如增加,修改,刪除 首頁,只需要讀取一次緩存表,一個(gè)SQL語句就OK了。。EASY吧。
2、優(yōu)化SQL語句(讓SQL語句更合理一些)。優(yōu)化數(shù)據(jù)庫字段類型。(能用其他的盡量不要用VCHAR)建立儲(chǔ)存過程。
3、2個(gè)方面:sql語句優(yōu)化,緩存。sql語句中select * from 表 不需要全部信息的話就盡量不要用*,要哪個(gè)字段就寫哪個(gè),不要怕寫。如今php中有許多的緩存方式,有模板緩存,sql查詢緩存。
網(wǎng)頁標(biāo)題:php統(tǒng)計(jì)大數(shù)據(jù)太慢 php數(shù)據(jù)統(tǒng)計(jì)分析
本文鏈接:http://fisionsoft.com.cn/article/dcdjhoh.html