gpt4 book ai didi

postgresql - 这些索引是否对 customer_id 做同样的事情?

转载 作者:行者123 更新时间:2023-11-29 12:07:16 26 4
gpt4 key购买 nike

我是 PostgreSQL 的新手,如果我问的是显而易见的问题,我深表歉意。

我有一个名为 customer_products 的表。它包含以下两个索引:

CREATE INDEX customer_products_customer_id
ON public.customer_products USING btree (customer_id)

CREATE UNIQUE INDEX customer_products_customer_id_product_id
ON public.customer_products USING btree (customer_id, product_id)

他们在 customer_id 方面做同样的事情还是他们以不同的方式运作?我不确定是应该保留它们还是删除 customer_products_customer_id

最佳答案

没有什么是第一个索引可以做而第二个索引做不到的,所以你应该删除第一个索引。

对于 WHERE(或 ORDER BY)子句仅涉及 customer_id 的查询,第一个索引相对于第二个索引的唯一优势是索引较小。这使得对许多索引条目的范围扫描稍微快一些。

额外索引在大小和数据修改速度方面的代价通常超过了该优势。在一个只读数据仓库中,我有一个查询可以显着获利,我可能会想保留这两个索引,否则我不会。

你绝对应该删除UNIQUE索引,因为它有一个与性能无关的有值(value)的用途:它防止表包含两行具有索引列的保存值。如果这是您想要保证的,UNIQUE 索引将确保您的数据保持良好状态。

旁注:即使效果相同,如果表具有唯一约束(由唯一索引支持)比仅具有索引更好。如果不出意外,它会更好地记录目的。

关于postgresql - 这些索引是否对 customer_id 做同样的事情?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56214998/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com