gpt4 book ai didi

sql - PostgreSQL:唯一约束或唯一索引

转载 作者:行者123 更新时间:2023-11-29 11:34:02 28 4
gpt4 key购买 nike

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

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

哪种方法最好:

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

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

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

最佳答案

I have a table 'users' with column login that should be unique

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

概念上:

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

Is it used in select queries with WHERE login = 'something'?

是的,是的。

Second case is unique login on not locked users (column locked = false).

如果是这种情况,unique 约束将不起作用。插入时的触发器可能会有所帮助。

should I create new index for column with foreign key?

不,不需要(至少在当前版本 10 和以后的版本中是这样),s。 documentation :

PostgreSQL automatically creates a unique index when a unique constraint or primary key is defined for a table. [...] There's no need to manually create indexes on unique columns; doing so would just duplicate the automatically-created index.

关于sql - PostgreSQL:唯一约束或唯一索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51003943/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com