PostgreSQL:唯一约束或唯一索引

问题描述 投票:3回答:1

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

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

这是最好的方法:

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

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

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

sql postgresql foreign-keys unique-constraint unique-index
1个回答
4
投票

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

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

概念:

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

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

是的。

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.