【发布时间】:2020-06-07 03:25:43
【问题描述】:
我想知道一张有 600 万行的表(也就是一个巨大的数据库)和 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 个表,100 万行:
CREATE TABLE blue_left_shoes(
id serial primary key,
stock int
);
后一种似乎更有效,因为用户不必询问条件,因为表是条件,但也许创建索引可以缓解这种情况?
此表用于查询左、右、“蓝色”、“绿色”或“红色”鞋子并检查剩余商品的数量,但这是一个简化的示例,但您可以考虑亚马逊(或任何数字销售平台)工具提示“库存仅剩 3 件”,用于工作负载和用例。将由用户(每天 10 万活跃用户)进行查询。
注意:这个问题主要针对 PostgreSQL,但与其他数据库的差异仍然相关且有趣。
【问题讨论】:
-
is_left_one acts as a boolean value.然后,无论如何,让它成为boolean。此外,如果不定义表的工作负载和角色,您的问题将无处可去。如果你从不查询整张表,只查询6个分区中的一个,那么统一表的缺点多多。 -
好的,我为 bool 进行了编辑,并将添加所需的详细信息
-
如今 600 万行并不被认为是“巨大的”。我什至不会认为它“大”。
标签: sql database postgresql indexing low-latency