從一個比我自己有更多經驗的人那裏,簡單地計算一個表中的項目數量(比如計算一個類別中的主題數量)還是保持一個包含該值的變量並且僅僅增加並稱它(類別表中的額外字段)?計數項目或遞增數字?
兩者之間是否存在顯着差異還是隻是非常輕微,即使它很輕微,一種方法是否還會比另一種更好?這不是針對任何一個特定的項目,所以請一般回答(如果有意義的話),而不是基於用戶數量等。
謝謝。
從一個比我自己有更多經驗的人那裏,簡單地計算一個表中的項目數量(比如計算一個類別中的主題數量)還是保持一個包含該值的變量並且僅僅增加並稱它(類別表中的額外字段)?計數項目或遞增數字?
兩者之間是否存在顯着差異還是隻是非常輕微,即使它很輕微,一種方法是否還會比另一種更好?這不是針對任何一個特定的項目,所以請一般回答(如果有意義的話),而不是基於用戶數量等。
謝謝。
要獲得項目(表中的行)的數量,你會使用標準的SQL,並做到按需
SELECT COUNT(*) FROM MyTable
注意,如果我錯過了什麼,每個項目(行)在表中有一些唯一的標識符,無論是零件號,某些代碼還是自動增量。因此,添加一個新行可以觸發列的「自動遞增」。
這與「計數行」無關。由於DELETEs或ROLLBACK,數字可能不是連續的。
試圖單獨保持行數將會以淚水和/或災難而告終。嘗試使用COUNT(*)+1或MAX(id)+1生成新的行標識符更糟糕
在我的論壇上,我算子線程在這樣的論壇:
SELECT COUNT(forumid) AS count FROM forumtable
只要你使用的標識符,指定哪些論壇和/或子部分相同,該列有一個索引鍵,它非常快。所以沒有理由添加比您需要的更多的列。
我認爲您的問題存在一些混淆。我的解釋是你想要做一個select count(*)
還是一個你追蹤實際數量的專欄。
如果您沒有理由這樣做,我不會添加這樣的列。這是過早的優化,並且會使您的軟件設計複雜化。
此外,你想避免在不同的地方存儲相同的信息。計數是一項微不足道的任務,所以你實際上覆制了信息,這是一個壞主意。
我會去計數。如果您發現性能問題,您可以考慮其他選項,但只要您保留一個單獨的值,就必須做一些工作來確保它始終正確。可以這麼說,使用COUNT()
你總能得到實際的數字「直接從馬的嘴裏」。
基本上,不要開始優化,直到你必須。如果一切正常,使用COUNT()
,那麼就這樣做。否則,將計數存儲在某個地方,而不是通過加/減來更新存儲值,在需要時運行COUNT()
以獲取新項目數
也許您應該明確自己的意圖和想法。是否像「爲什麼我們總是在SQL中使用COUNT(*)?」一樣簡單?例如 – gbn