2011-05-01 95 views
2

我有一個產品表。 在我的表中有一個像productid,價格,數量,總數字段。爲sql server選擇查詢

比我multyply價格,數量字段和答案存儲在總場。

回答

5

不要在表格中存儲派生值 - 這是不好的設計。

由於總數是價格和數量的乘積,所以當您有這些數值時,您可以隨時計算它 - 爲什麼要存儲它?如果您這樣做,您正在創建數據庫中數據不一致的可能性。

直接從SQL檢索這樣的價值是微不足道的,而不需要存儲它:

SELECT price, quantity, price * quantity AS total 
FROM product 

更新:

正如@馬丁指出,2005+具有Computed Columns這是SQL服務器非持久性或索引列,作爲方便返回計算結果。

我強調這些列是而不是持久存在。

+0

完全取決於OP的查詢內容。如果他們想要通過'total'排序的'TOP 10'產品,那麼計算列將對此有利。計算列幾乎否定了所有的論點,因爲它們確保不存在不一致數據的可能性,並且不必持久化。 – 2011-05-01 21:52:31

+0

@Martin - 所以你同意'total'列不會被保留。 – Oded 2011-05-02 04:43:45

+0

我沒有說過。這取決於OP的查詢內容。如果他們想要運行查詢,例如「查找總數> 10000的所有產品」,那麼索引它可能是合理的。 – 2011-05-02 12:30:33

1

可以爲此

ALTER TABLE Products ADD total AS price * quantity 

上述定義列既不堅持也不被索引創建一個計算列,因此是隻爲你的查詢提供了方便。

如果您的查詢需要在搜索謂詞中使用total,您可以考慮對這樣的計算列進行索引。任何這樣的持久值都由SQL Server自動維護,從而避免數據異常的潛在問題。

此外,在您正在進行此類查詢的情況下,即使沒有索引這些列,您的查詢也可以從improved cardinality estimates due to statistics on the computed column中受益。