特定の列のすべての値の平均を計算する必要がある状況があります。大きなMYSQLテーブルの特定の列の浮動小数点値の平均を計算する
SELECT SUM(`unitCost`)/COUNT(*)
FROM `items`
WHERE `itemID_FK`=%d
私はこれをより効率的にする方法についてのインプットを探しています。このクエリは、潜在的に多数のレコードを読み取らなければならなくなる可能性があります。
itemID_FK
の平均値を別のテーブルに維持し、items
テーブルにレコードが追加されたときとその平均値を更新し続ける方が効率的かどうかは疑問でしたか?
私はそれがデータベース内の他のカラムやテーブルから計算または導出することができ、列を持つようにデータベース設計の原則に反していることをどこかで読みました。
EDIT:
列:
instanceID int(10) UN PK AI
userID_FK int(11) UN
itemID_FK int(11) UN
dateAdded date
datePurchased date
listID_FK int(11) UN
unitCost decimal(11,2) UN zerofill
quantity decimal(11,2) UN zerofill
unitID_FK int(10) UN
あなたのテーブルの 'itemID_FK'は' index'ですか?ちなみに、 'AVG'関数はあなたが望むものも返すべきです。 –
MabyはSUM()/ COUNT(*) 'AVG(unitCost)の代わりにAVGを使用することができます 投稿項目 ここitemID_FK =%d GROUP BY unitCost' –
リンクを含める:http://www.tizag.com/mysqlTutorial /mysqlavg.php –