我有一个包含以下模式的数万亿条记录的大表(这里序列号是关键):
MyTable
Column | Type | Modifiers
----------- +--------------------------+-----------
serial_number | int |
name | character varying(255) |
Designation | character varying(255) |
place | character varying(255) |
timeOfJoining | timestamp with time zone |
timeOfLeaving | timestamp with time zone |
现在我想在这个表上触发下面给出的形式的查询:
select place from myTable where Designation='Manager' and timeOfJoining>'1930-10-10' and timeOfLeaving<'1950-10-10';
我的目标是实现快速的查询执行时间。因为,我正在从头开始设计自己的数据库,因此我有以下选择。请指导我这两个选项中的哪一个会更快。
创建2个单独的表。在这里,table1 包含模式(serial_no、name、Designation、place),表 2 包含模式(serial_no、timeOfJoining、timeOfLeaving)。然后在两个表之间执行合并连接。这里,serial_no 是两个表中的键
保留一个单一的表 MyTable。并运行以下计划:创建一个索引 Designation_place_name 并使用 Designation_place_name 索引,找到符合索引条件关系 = 'Manager'(磁盘上的行是随机访问的)的行,然后使用过滤功能只保留与 timeOfJoining 匹配的行标准。
请帮我弄清楚哪一个会更快。如果你也能告诉我各自的利弊,那就太好了。
编辑:我打算将我的表用作只读。