与对一列进行查询相比,比较两列进行查询的成本有多高



我有一个照片数据库。我已经记录了宽度和高度。我正在考虑添加一个"方向"栏,以防有人想按肖像或风景进行过滤。

-- get landscape orientation photos with one column
select * from photos where orientation = 'landscape';

但当然,我可以像这样比较这两列,使方向列变得不必要:

-- get landscape orientation photos by comparing two columns
select * from photos where width > height;

如果我不一定要创建一个额外的专栏,我倾向于不这样做。只需要再维护一件事。但我想知道,在繁重的工作量下,这种比较是否会花费更多?

您甚至可以自动进行此计算:

ALTER TABLE photo ADD COLUMN orientation enum('landscape', 'portrait') GENERATED ALWAYS AS (if(height>width, 'landscape', 'portrait')),
ADD INDEX o(orientation)

如果有其他排序标准,或者数据集在某种程度上特别有偏见,那么您可能会有一些效率。通常,除非所有结果都在该索引中作为主键或复合键,否则很少能有效地使用二进制索引。

方形照片呢?

小提琴

了解的方法是在特定的数据集、数据库(postgresql和mysql非常不同(、版本和硬件上对其进行基准测试。

在我的手上,一个字符串列与字符串常量的比较比两个浮点列的比较稍微慢一些。

这种差异不太可能有意义,而且这也不太可能是你正在运行的查询(你真的要从一个没有额外选择标准的大型数据集中返回每一张风景照片吗?(

最新更新