我目前正在为项目构建postgres数据库。我有一些继承相同领域的不同模型。
class Animal
int legs
class Cat < Animal
int tail_length
class Snake < Animal
bool is_venomous
我需要针对多达一百万动物的数据集进行快速读取进行优化,其中大多数是Cats。我担心这些关系可能会损害这些大型数据集中连接过多的性能。
我希望能够通过id获取Animal,但也能够获取所有Cats或Snakes。
我看到两种不同的方法:
具有实体化视图的外键
Animal Cat
+---------------+----------+ +--------------+-------------+
| primary key | id | | foreign key | animal_id |
+---------------+----------+ +--------------+-------------+
| int | legs | | int | tail_length |
+---------------+----------+ +--------------+-------------+
然后有一个物化视图在查询之前为Cats执行连接以检索所有猫
OR
Postgres数据库继承
Animal Cat INHERITS (Animal);
+---------------+----------+ +--------------+-------------+
| primary key | id | | int | legs |
+---------------+----------+ +--------------+-------------+
| int | legs | | int | tail_length |
+---------------+----------+ +--------------+-------------+
这允许来自Animal的查询select *抓住所有动物并从Cats中选择*来抓住所有猫。
优化对postgres中继承且紧密相关的大型数据集的读取的最佳方法是什么?
编辑:在写入后索引物化视图需要多长时间?