Mysql

執行總計:儲存或計算

  • November 30, 2016

假設我有一個product包含以下列的表格:

product
--------
product_id
name

我有另一個表來記錄每個產品的交易(IN/OUT)

product_transaction
--------------------
transaction_id
transaction_date
product_id
type
quantity

我希望有一個頁面列出products 及其詳細資訊,包括目前數量。同時,我還想要一個頁面,列出一天(或某個日期範圍)內的所有交易,其中還包括目前交易的執行總計。

我的問題是,我是否應該將執行總計儲存在product_transaction表中,將目前數量儲存在product表中。或者它是否足夠快以即時計算它們?

像許多事情一樣,這個問題的答案是“視情況而定”。在這種情況下,它取決於每個產品將獲得多少交易。

對於低到中等的交易量,動態計算執行總計將非常快,您無需編寫大量程式碼來計算、儲存和維護總計。

索引你的表!

  • 確保您有一個索引(或開始於)production_transaction.product_id,以便您可以快速檢索給定產品的所有交易。
  • 指定 product_id 和日期範圍(或 >= 今天)的組合和查詢的索引product_id, transaction_date將為您提供給定產品一天的交易,並具有良好的性能。

測試!

請務必在您的測試/問答環境中進行測試!生成有代表性的事務負載,但也會產生更高的負載,以查看它在預期和意外情況下的表現。

即使在高事務級別,您也必須權衡與更新和儲存執行總計相關的性能與查詢它們的頻率。

引用自:https://dba.stackexchange.com/questions/98136