1.問題背景:前臺頁面用表格展示了數(shù)據(jù),還要支持將數(shù)據(jù)導(dǎo)出為EXCEL文件。 查詢數(shù)據(jù)庫有時很慢(比如時間范圍大[2年],sql語句執(zhí)行時間差不多220s)
一般是導(dǎo)出的數(shù)據(jù)是重新查詢數(shù)據(jù)庫還是可以直接把前臺得到的數(shù)據(jù)傳給PHPExcel做處理?
感謝每一個回答者。
PS:sql語句優(yōu)化盡力了(索引分區(qū)做了 多表有的表數(shù)據(jù)300w條),如果查詢一周執(zhí)行時間1.6s左右,查幾年就得幾分鐘了。
ringa_lee
html 表格可以直接導(dǎo)出為xlsx;
如果不使用1,那么前端展示數(shù)據(jù)前,將獲取的數(shù)據(jù)緩存起來,導(dǎo)出時可以發(fā)送回后端而不需要再次數(shù)據(jù)庫操作;
2 的前提是,數(shù)據(jù)量在前后端通信可以接受的范圍內(nèi)(比如超過50MB 就屬于過大了),犧牲通信的消耗換取數(shù)據(jù)庫的消耗。
實際上js是有可以處理excel的插件的,不過你前臺的數(shù)據(jù)不還是從后臺拿到的嗎
js的excel插件,百度都有一堆 比如 exceljs
有些mysql管理軟件,比如navicat可以直接把數(shù)據(jù)庫導(dǎo)出成為excel,不一定非得用php才能導(dǎo)出,雖然我世界上最好的語言什么都能實現(xiàn),但是你也要考慮下其他東西也能實現(xiàn)
個人不太支持將數(shù)據(jù)重新向后臺調(diào)取,你或者可以向樓上那樣直接html到導(dǎo)出excel,當(dāng)然你可以后臺處理,不過你在顯示數(shù)據(jù)在html同時,將數(shù)據(jù)緩存到服務(wù)器,假如輸出excel直接從緩存區(qū)讀出數(shù)據(jù)再輸出excel
一般導(dǎo)出數(shù)據(jù)到EXCEL都是后端操作,這里用戶會選擇一定的條件進行數(shù)據(jù)的導(dǎo)出。后端如果比較耗時可以采用異步任務(wù)來處理。
題主我想了解一下導(dǎo)出數(shù)據(jù)是導(dǎo)出所有數(shù)據(jù)嗎?還是可以選擇時間范圍呢?如果是導(dǎo)出所有的,可以在后臺跑定時任務(wù),選擇客戶量少的時候,比如夜里去后臺去一下所有的數(shù)據(jù),然后前段導(dǎo)出的時候直接拿就好了,定時任務(wù)每天還要定時檢查該數(shù)據(jù)是否為最新的