许多表与一个表的数据库设计性能

时间:2017-01-09 22:53:43

标签: sql database postgresql database-design

说我有一张ANIMAL表,

CREATE TYPE VALID_ANIMAL AS ENUM ('Dog', 'Cat', 'Pig');
CREATE TABLE IF NOT EXISTS ANIMAL (
  animal_type VALID_ANIMAL,
  name        TEXT,
  owner       TEXT,
  .... many more common fields
);

因此,如果这张桌子非常大,可以混合使用" Dog"," Cat"和"猪"它会减慢搜索包含" Dog"?

的行的速度

或者我应该有3个名为DOG,CAT和PIG的独立表。这样数据就已经分开了,当查询DOG时我会去狗桌。我担心一个大表可能会在过滤掉时出现性能问题" Cat"和"猪"在寻找" Dog"。

1 个答案:

答案 0 :(得分:1)

如果你有1,000,000行,那么每只动物可能有大约300,000行。你真的无法加速一个三行中取一行的查询。

这并非严格属实。你可以做两件事。您可以按动物类型按表进行分区。一百万行表位于低端进行分区。

另一件事是您可以在动物类型上创建聚集索引。在MySQL中,您可以通过将动物类型的复合主键声明为第一个指定键来完成此操作。