Mysql
執行總計:儲存或計算
假設我有一個
product
包含以下列的表格:product -------- product_id name
我有另一個表來記錄每個產品的交易(IN/OUT)
product_transaction -------------------- transaction_id transaction_date product_id type quantity
我希望有一個頁面列出
product
s 及其詳細資訊,包括目前數量。同時,我還想要一個頁面,列出一天(或某個日期範圍)內的所有交易,其中還包括目前交易的執行總計。我的問題是,我是否應該將執行總計儲存在
product_transaction
表中,將目前數量儲存在product
表中。或者它是否足夠快以即時計算它們?
像許多事情一樣,這個問題的答案是“視情況而定”。在這種情況下,它取決於每個產品將獲得多少交易。
對於低到中等的交易量,動態計算執行總計將非常快,您無需編寫大量程式碼來計算、儲存和維護總計。
索引你的表!
- 確保您有一個索引(或開始於)
production_transaction.product_id
,以便您可以快速檢索給定產品的所有交易。- 指定 product_id 和日期範圍(或 >= 今天)的組合和查詢的索引
product_id, transaction_date
將為您提供給定產品一天的交易,並具有良好的性能。測試!
請務必在您的測試/問答環境中進行測試!生成有代表性的事務負載,但也會產生更高的負載,以查看它在預期和意外情況下的表現。
即使在高事務級別,您也必須權衡與更新和儲存執行總計相關的性能與查詢它們的頻率。