[英]Unique vs Check constraint
我向 PostgreSQL 表添加了唯一約束和檢查約束。
現在,當我檢查該表的詳細信息時,唯一約束列在“索引”下,而檢查約束沒有。
為什么會有這種行為?
請參閱此處的文檔: https://www.postgresql.org/docs/12/ddl-constraints.html#DDL-CONSTRAINTS-UNIQUE-CONSTRAINTS
添加唯一約束將自動在約束中列出的列或列組上創建唯一 B 樹索引。 僅涵蓋某些行的唯一性限制不能寫為唯一性約束,但可以通過創建唯一部分索引來強制執行此類限制。
您在 Indexes 下看到 UNIQUE 是因為創建了唯一的 B 樹索引。
為 UNIQUE 約束創建索引是因為它是檢查值對於大型表是否唯一的一種高效方法:您必須檢查表中的所有行以確保該值是唯一的。 不會為 CHECK 約束創建索引,因為不存在性能問題:您只需檢查當前行的列值 - 您不需要檢查表中的所有行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.