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