【发布时间】:2020-07-21 14:48:41
【问题描述】:
我有一个照片数据库。我已经记录了宽度和高度。我正在考虑添加一个“方向”列,以防有人想按纵向或横向过滤。
-- 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;
如果我不是绝对必须创建一个额外的列,我倾向于不这样做。只需要维护一件事。但是不知道是不是在重载下,对比的成本会不会高很多?
【问题讨论】:
-
像
orientation = 'landscape'这样带有方向索引的直接比较将比算术比较快得多。如果您将orientation设为bit(例如,1 = 纵向,0 = 横向),它将几乎不占用空间,并且在插入或更新时很容易计算。 -
谢谢尼克,也许值得设置。
-
取决于你有多少张照片?百万 ?如果您不想添加 addl 列,比较不会增加负载
-
@Nick 布尔字段上的索引几乎没用。假设这些值大致均匀地分布在 0 和 1 之间,那么表扫描将比索引查找更快。一般来说,使用索引需要使所需记录低于表总数的 10% 才值得。
-
@JonathanWillcock 同意,如果它们分布大致均匀的话。但是,一般中,照片往往比肖像更倾向于横向。快速扫描我的一张照片磁盘显示在纵向模式下大约 14-15%。
标签: mysql sql database postgresql