DB体系结构:使用WHERE的表与多个表

问题描述 投票:0回答:2

我想知道拥有一个拥有600万行的表(又名拥有巨大DB)和10万活跃用户之间的区别是什么:

CREATE TABLE shoes (
id serial primary key,
color text,
is_left_one boolean,
stock int
);

还有6个索引,例如:

CREATE INDEX blue_left_shoes ON shoes(color,is_left_one) WHERE color=blue AND is_left_one=true;

对:6个具有一百万行的表:

CREATE TABLE blue_left_shoes(
id serial primary key,
stock int
);

后一种似乎更有效,因为用户不必问条件,因为表是条件,但是也许创建索引可以减轻这种情况?

此表用于查询左,右,“蓝色”,“绿色”或“红色”鞋子并检查剩余物品的数量,但这是一个简化的示例,但您可以想到亚马逊(或任何数字销售平台)工具提示“工作量和用例仅剩3件”。进行查询的是用户(每天活动10万)。

NB:问题主要是针对PostgreSQL,但与其他数据库的差异仍然是相关且有趣的。

sql database postgresql indexing low-latency
2个回答
0
投票

为此:

WHERE color=blue AND is_left_one=true

最佳索引是

INDEX(color, is_left_one)  -- in either order

首先具有id使其对该WHERE无效。

通常有多个相同的表而不是一个表是很糟糕的。


0
投票

在后一种情况下,使用称为blue_left_shoes的表

  • 您的代码需要首先确定要查看的表(与在where子句中参数化的值相反)
  • 随着排列和选项的增加,您需要增加表的数量,并增加应用程序中确定要使用哪个表的逻辑
  • 需要使用此数据库的任何内容(即报告工具或API)现在都需要重新实施所有这些规则

您在高层施加逻辑以提高性能。

如果您要适当地对表进行分区和/或索引,您将获得相同的效果-SQL查询仅浏览重要的记录。不同之处在于您不需要在更高的层中实现此逻辑

只要您可以正确地建立索引,将其保留为一张表几乎总是正确的事情。

© www.soinside.com 2019 - 2024. All rights reserved.