繁体   English   中英

PostgreSQL:唯一约束或唯一索引

[英]PostgreSQL: unique constraint or unique index

如果列包含唯一约束并且我想通过此列快速搜索,我应该创建唯一索引吗?

例如,我有一个列login users应该是唯一的。 我需要login列的快速搜索用户。

这是最好的方法:

  1. 创建一个唯一约束(它创建内部唯一索引 - 它是用于WHERE login = 'something'选择查询吗?)
  2. 创建一个独特的索引
  3. 创建唯一索引和唯一约束(索引重复内部索引?)

第二种情况是未锁定用户的唯一login (列locked = false )。 Postgres不支持部分条件。 我应该创建一个唯一的条件和部分索引,还是仅仅是一个部分索引?

还有一个问题:我应该为具有外键的列创建新索引吗? 例如: users.employee_idemployees.id ,我应该在employee列上创建索引以优化查询SELECT * FROM users WHERE employee_id = .... 何时是优化引擎使用的内部索引,何时不是?

我有一个表'users',列登录应该是唯一的

如果是这种情况,则需要一个唯一约束。 唯一索引强制执行唯一约束(在幕后)。

概念:

  • 唯一约束定义了唯一性。
  • 唯一索引实现唯一约束。
  • 唯一索引提供快速搜索,因为它允许诸如索引范围扫描和索引搜索之类的操作。

是否在WHERE login ='something'的选择查询中使用?

是的。

第二种情况是未锁定用户的唯一登录(列锁定= false)。

如果是这种情况,则unique约束将不起作用。 也许插入触发器可以帮助到这里。

我应该为具有外键的列创建新索引吗?

不,它不需要(至少在当前的版本10 ,也许是更高版本),s。 文件

当为表定义唯一约束或主键时,PostgreSQL会自动创建唯一索引。 [...]无需在唯一列上手动创建索引; 这样做只会复制自动创建的索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM