看板 PHP 關於我們 聯絡資訊
建議從 database sql 指令來處理, 三千萬筆資料要 pass 給 PHP 應該會負擔很重. 處理步驟 * 設定 index table1 設 index (start_1, end_1) table2 設 index (start_2, end_2) * 下 SQL 語法: SELECT * FROM table2 WHERE NOT EXISTS ( SELECT * FROM table1 WHERE start_2 <= start_1 AND end_1 <= end_2 ) ※ 引述《eco100 (Maktub)》之銘言: : 我的問題是這樣的 : 我有兩個table如下 : table1: table2: : no. start_1 end_1 name start_2 end_2 : 1 3 5 A 1 6 : 2 4 6 B 7 10 : 3 11 13 C 11 15 : 4 12 14 : 規則是 table1 的start跟end 會落在table2的其中一個start跟end之間 : 我要找出 table2中 完全沒有table1資料落進去的name : 呃 有點繞口 : 我以這兩個table為例 table1中的no.1 start跟end分別為(3, 5) : (3, 5)會落在 table2中的 A (1, 6)裡面 所以A就不是我要找的啦~ : 同理可得到 table1的data會落入到table2中的A跟C : 所以只有"B"是我要的結果 : 依我目前初學者的作法 我是先找出A跟C : 然後再用全部扣掉A、C 得到B這個答案 : 而我目前實際的問題是 : table1約有「3000萬」筆的資料 table2約有25000筆資料 : 在table2 大約會有 1000筆是不會包含table1中的任何資料的 : 若按照我的邏輯去寫 一定會跑很久 : 所以我想問 是否有比較直接的寫法 可以找出那大約1000筆的資料? : 或者是有比較快速的寫法? 可以用哪些語法? : 還請各位指點 感謝大家 ^^ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 115.64.54.125
jackghost:同感,請務必在SQL處理好~~若是MSSQL的話可考慮用BETWEEN 05/26 23:23
ckaha:index建R-tree 會更快 一般都是用b-tree 05/27 09:25
clifflu:start_2 <= start_1 AND end_1 <= end_2 這個沒辦法靠 05/27 17:36
clifflu:cache,所以校益其實沒想像中大喔,很可能還是 35M * 30k 05/27 17:36