如果列包含唯一约束并且我想通过该列快速搜索,我应该创建唯一索引吗?
例如,我有一个表users
,其中列login
应该是唯一的。我需要login
列中的快速搜索用户。
哪种方法是最好的:
WHERE login = 'something'
的选择查询中使用它?)第二种情况在未锁定的用户(列login
)上是唯一的locked = false
。 Postgres不支持部分条件。我应该创建唯一的条件索引和部分索引,还是仅创建部分索引就足够了?
还有一个问题:我应该为带有外键的列创建新索引吗?例如:users.employee_id
与employees.id
相关,是否应该在employee
列上为优化查询SELECT * FROM users WHERE employee_id = ....
创建索引?优化引擎何时使用内部索引,何时不使用内部索引?
答案 0 :(得分:4)
我有一个表“ users”,其列登录名应该是唯一的
如果是这种情况,则需要唯一约束。唯一约束通过唯一索引强制执行(在幕后)。
从概念上讲:
它用于WHERE login ='something'的选择查询吗?
是的。
第二种情况是未锁定用户的唯一登录(列锁定= false)。
在这种情况下,unique
约束将不起作用。也许在插入时触发触发器可能会有所帮助。
我应该为带有外键的列创建新索引吗?
否,不需要(至少在当前版本10
和更高版本中)。 documentation:
在为表定义唯一约束或主键时,PostgreSQL自动创建唯一索引。 [...]无需在唯一列上手动创建索引;这样做只会复制自动创建的索引。