我有一个包含以下列的表格:
ItemCode VARCHAR
PriceA DECIMAL(10,4)
PriceB DECIMAL(10,4)
该表大约有1,000行。
我的要求是检查每一行的差异(PriceA-PriceB
),然后显示前50个价格差异最大的商品。
有两种方法可以实现此目的
1)相信SQL计算是非复杂,简单且快速的,因此我运行以下查询:
SELECT ItemCode, (PriceA - PriceB) AS PDiff FROM testtable ORDER BY PDiff DESC LIMIT 50
第二,
2)再增加一列(称为PriceDiff
),该列将存储差异(PriceA-PriceB
)。
但是,这些将必须手动插入并且需要额外的空间。但它只需运行MAX(PriceDiff)
选择查询即可获得前50名。
我的问题是-就Web应用程序的速度和效率(在网站/应用程序上显示结果)而言,以上哪种方法更好?
我尝试生成每个查询所消耗的时间,但是两者都报告相似的数字,因此无法做出任何推断。
我们将不胜感激专家的任何解释或任何代码的微调。
谢谢
答案 0 :(得分:4)
通常,要提高性能,您始终必须在内存和时间之间进行权衡。缓存结果将提高速度,但是会占用更多内存。您可以通过动态计算内容来减少内存使用,而以性能为代价。
在您的情况下,在数据库中存储额外的1000+值仅需几个Kb。动态计算差异对性能的影响可以忽略不计。两种选择对任何数据库和服务器都是绝对的花生。
我会坚持不停地进行计算,因为它不那么复杂,并且可以使数据库规范化。
答案 1 :(得分:-1)
如前所述,第一种方法最快,但容易出错。
我可以建议使用主键的另一种解决方案。然后,您可以将新列的值设置为要在Web应用程序中尝试计算的值。
然后,当想知道前50名时,可以使用第二种方法来找到前50名,这是从原来的方法中找到的,您可以从存储差异的表中进行选择。 这些链接说明了主键以及如何使用它们: