sql - Postgres 中的唯一约束是否创建索引?
问题描述
假设我有一个如下所示的表:
CREATE TABLE products (
product_no integer UNIQUE NOT NULL,
name text,
price numeric
);
然后,如果我将值插入表中,postgres(或任何类似的 DBMS)实际上会检查表的每一行还是自动创建索引?如果没有索引,这会很快变得昂贵 [O(N!)]。
解决方案
是和不是。Postgres 检查是否product_no
尚未插入。它通过检查索引而不是单个行来做到这一点。
唯一约束是使用索引实现的,因此检查重复是 O(log n) 而不是 O(n)。
推荐阅读
- python - 如何获取电子邮件 gmail python API 的发件人
- python - 在 python 中安装模块或包或其他内容时出错
- html - 添加内容后行内块定位异常
- node.js - 我们可以使用 firebase 创建路由吗?
- google-apps-script - LanguageApp.translate() 导致 onEdit(e) 失败
- javascript - require('dotenv').config() 有什么作用?
- python - 使用 Selenium Python 的 ElementNotInteractableException
- wso2 - 从 6.4.0 升级到 WSO2 EI-6.5.0 导致 org_apache_tomcat_websocket] 错误
- vb.net - SSRS 2008:在自定义代码中检查数组为空
- python - 如何在 GTK3 Python 应用程序中播放自定义 GUI 声音?