1

我有一种情况,我需要计算特定列中所有值的平均值。我得到了这个有效的 SQL 语句:

SELECT SUM(`unitCost`)/COUNT(*) 
FROM `items` 
WHERE `itemID_FK`=%d

我正在寻找有关如何提高效率的意见。此查询可能会导致必须读取大量记录。

itemID_FK我想知道在单独的表中维护平均值并在将记录添加到表时不断更新平均值是否会更有效items

我在某处读到,拥有一个可以从数据库中的其他列或表计算或派生的列是违反数据库设计原则的。

编辑:

列:

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
4

1 回答 1

2

这是一个非常基本的查询,您不太可能找到任何方法使其实际运行得更快。您可以使用一个avg()功能,尽管它可能不会更快。

至于将平均值保存在另一个表中:这违反了通常持有的数据库设计最佳实践,但这并不意味着您不能这样做。人们为了提高绩效而做出妥协;像这样的权衡是软件开发人员的股票和交易。这样做会使查询平均值的速度更快,但会牺牲程序的清晰度和在主表上执行插入、删除和更新的任何地方的一点性能。

于 2012-05-02T11:43:22.537 回答