mysql用于选择两列的最大差异

ct3nt3jp  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(294)

我有一个包含以下列的表:

ItemCode VARCHAR
PriceA DECIMAL(10,4)
PriceB DECIMAL(10,4)

这张table大约有1000行。
我的要求是检查差异( 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应用程序(在网站/应用程序上显示结果)的速度和效率而言,上面哪种方法更好?
我试图为每个查询生成所消耗的时间,但两个都报告了相似的数据,因此无法做出任何推断。
Maven们的任何解释,或者对代码的任何微调,都将非常感激。
谢谢

iszxjhcz

iszxjhcz1#

一般来说,为了提高性能,您必须在内存和时间之间进行权衡。缓存结果会提高速度,但是会占用更多内存。您可以通过以牺牲性能为代价动态计算内容来减少内存使用。
在您的例子中,在db中存储额外的1000+个值只需要几个额外的kb。动态计算差异对性能的影响可以忽略不计。任何一个选项对任何数据库和服务器来说都是微不足道的。
我会坚持做计算的飞行,因为这是不太复杂,并保持正常化的数据库。

ibrsph3r

ibrsph3r2#

如前所述,第一种方法速度最快,但容易出错。
我可以建议另一种解决方案,使用主键。然后,您可以将新列的值设置为您试图从web应用程序中得到的值。
然后,当你想知道前50名的时候,你可以用你原来的方法找到前50名,用你的第二种方法,从存储差异的表中选择。这些链接解释了主键以及如何使用它们:
http://www.mysqltutorial.org/mysql-primary-key/
https://www.w3schools.com/sql/sql_primarykey.asp

相关问题