首页 > 解决方案 > 搜索查询执行时间与总表行数无关

问题描述

鉴于此搜索查询的结果始终包含相同的行子集?

如果这是不可能的,有什么方法可以使表大小对搜索执行时间的影响最小?

示例:两个结构相同但大小不同的表:table11000 行和table21000 000 行。这些表具有以下结构:

  1. id: 主键列
  2. ts_utc: UTC 时间戳列
  3. user_id: 外键列

在这两个表中,我们希望找到所有user_id等于 1 且ts_utc大于昨天日期的行。两个表的结果都包含相同的 10 行。

标签: sqldatabasepostgresqldatabase-design

解决方案


您正在描述一个索引,特别是在(user_id, ts_utc). 这适用于查询:

select t.*
from t
where user_id = 1 and ts_utc >= current_date;

搜索时间并不完全相同,因为索引存储为平衡树。但是,您正在处理对数差异——它们非常小且难以测量。


推荐阅读