Re: [請益] 關於大筆資料的統計

看板PHP作者 (小殘)時間17年前 (2008/03/03 10:52), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/4 (看更多)
※ 引述《okdla (跟著鄉民進來看熱鬧)》之銘言: : 請問一下,用php連mssql : 如果mssql裡的資料有快5萬筆 : 統計起來很慢是不是算正常的呢??? : 比如說我mssql裡有A資料表儲存學生的姓名和基本資料,然後B資料表儲存學生學科的 : 成績 : 我要統計學生成績在0-50,50-60,60-70,70-80,80-90,90-100的個數和學生性別的關係.. : 我用php的mssql_query去跑,可是要跑快2分鐘,這是正常的嗎?? : 還是說php無法處理太多筆數的資料表呢?? : 我是這樣下指令的 : select count(*) from A where A.sex='F' and A.fid in (select fid from B where : B.grade>=0 and B.grade<50) : select count(*) from A where A.sex='M' and A.fid in (select fid from B where : B.grade>=0 and B.grade<50) 括號中的select是一樣的,但這樣會重覆做兩次 試著把他合併起來 SELECT A.sex, count(*) FROM A, B WHERE A.fid = B.fid AND B.grade >=0 AND B.grade < 50 GROUP BY A.sex 會得到下面結果 sex count(*) F XXX M XXX 也可以嘗試用php解決, 先用性別和分數做區分再跑一個for去統計 SELECT A.sex, B.grade, count(*) FROM A, B WHERE A.fid = B.fid GROUP BY A.sex, B.grade ORDER BY A.sex, B.grade 應該會得到 sex grade count(*) F 0 X F 1 X .. F 100 X M 0 X M 1 X .. M 100 X 然後for去把count加起來, 這樣就只有一個sql qurey和O(200)的迴圈 或者0~50範圍比較大, 獨立一個sql query, 其他的一個query再搭配for 這樣應該會比較快吧? : . : . : . : . : fid是學生編號為唯一值,sex是性別,grade是成績 : 大概是要做出一個如下的統計表 : 0-50 50-60 60-70 70-80 80-90 90-100 : ------------------------------------ : 男筆數 : 女筆數 : 是我指令下錯了嗎???還是php跑的本來就很慢呢??? : 建view的話速度可以變快嗎???要如何建呢?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.155.167
文章代碼(AID): #17osVYgR (PHP)
討論串 (同標題文章)
文章代碼(AID): #17osVYgR (PHP)