postgresql - 这些索引是否对 customer_id 做同样的事情?
问题描述
我对 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
对于仅涉及(or ORDER BY
) 子句的查询,第一个索引相对于第二个索引的唯一优势customer_id
是索引更小。这使得对许多索引条目的范围扫描更快一些。
就大小和数据修改速度而言,额外索引的价格通常超过了这一优势。在一个只读数据仓库中,我有一个可以显着获利的查询,我可能很想保留两个索引,否则我不会。
您绝对不应该删除UNIQUE
索引,因为它具有与性能无关的有价值的用途:它可以防止表包含两行具有索引列的保存值的行。如果这是您想要保证的,UNIQUE
索引将确保您的数据保持良好状态。
旁注:即使效果相同,如果表具有唯一约束(由唯一索引支持)比仅具有索引更好。如果不出意外,它会更好地记录目的。
推荐阅读
- python - 已安装 Torch,但未找到 repeat_interleave
- python - 使用 pd.read_csv() 读取多个文件并将每个文件保存为不同的变量
- mustache - 如何在 mustacle 标签中进行 Nestle 循环
- keras - Keras度量:只计算二分类中一类的结果
- react-native - React Native Base Picker 显示警告:VirtualizedLists 不应该嵌套在普通的 ScrollViews 中
- python - 用户输入相同的占位符文本 python tkinter
- c# - 列出 Visual Studio 2019 中未引用的文件?
- sql - 为什么这显示“SP2-0552:未声明绑定变量“SEL”。” 在 sql 加?
- javascript - 为什么读取二维码中的特殊字符时出现编码问题?
- javascript - 每次单击输入时,如何在不刷新页面的情况下在我的 html 中显示数据库中的数据?