我想知道拥有一个拥有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,但与其他数据库的差异仍然是相关且有趣的。
为此:
WHERE color=blue AND is_left_one=true
最佳索引是
INDEX(color, is_left_one) -- in either order
首先具有id
使其对该WHERE
无效。
通常有多个相同的表而不是一个表是很糟糕的。
在后一种情况下,使用称为blue_left_shoes
的表
您在高层施加逻辑以提高性能。
如果您要适当地对表进行分区和/或索引,您将获得相同的效果-SQL查询仅浏览重要的记录。不同之处在于您不需要在更高的层中实现此逻辑
只要您可以正确地建立索引,将其保留为一张表几乎总是正确的事情。