看板 Database 關於我們 聯絡資訊
※ 引述《Inosxz (加麥加麥)》之銘言: : 資料庫名稱:MySQL : 資料庫版本:5.7 先假設你用 InnoDB (預設值)... : 內容/問題描述: : 原始的資料是每個商品在某日期為一個csv (例如: 商品A_20170901) : 裡面有客戶a, b....的資料 : 如果把全部的資料丟到一個table : 像是這樣 : 商品 日期 客戶 數量 ... item_id trx_at customer_id num : A 20170901 a 30 ... : A 20170901 b 40 ... : B 20170901 a 35 ... : B 20170901 c 40 ... : . . . . ... : A 20170902 a 35 ... : . . . . ... : 但是發現資料量很大 一週就會有幾百萬筆 : 而且這樣的結構沒有主鍵 : 我需要的查詢有兩種統計情況 : 1) 商品A在一段時間(例如20170701~20170930) 出給各客戶的總數量 : 例如a有3000個、b有2500個 SELECT customer_id, COUNT(*) FROM table WHERE trx_at BETWEEN ... AND ... GROUP BY customer_id; 所以有 (trx_at, customer_id) 的 covered index 會有幫助。 : 2) 客戶a在一段時間(例如20170701~20170930) 持有商品的數量 : 例如持有商品A 3000個、商品B 700個 SELECT item_id, COUNT(*) FROM table WHERE trx_at BETWEEN ... AND ... WHERE customer_id = ... GROUP BY item_id; 所以有 (customer_id, trx_at, item_id) 的 covered index 會有幫助。 : 那資料結構是參考版上這篇的方法3嗎 : #1DjQ-Ozb (Database) : https://www.ptt.cc/bbs/Database/M.1303752600.A.F65.html : 或是有其他適合的結構呢? 先看看這樣速度夠不夠,以你說的數量來看應該是很夠用... -- Resistance is futile. https://blog.gslin.org/ & <[email protected]> -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.116.104.21 ※ 文章網址: https://www.ptt.cc/bbs/Database/M.1505725758.A.BAE.html
Inosxz: 好,我試試,感謝! 09/19 20:32