在postgresql中:澄清;约束foo_键主键(foo)";

在postgresql中:澄清;约束foo_键主键(foo)";,postgresql,Postgresql,很抱歉,如果这是一个非常简单的问题,但是我被文档搞糊涂了,我在网上搜索没有得到任何明确的答案 如果我有下表架构: CREATE TABLE footable ( foo character varying(10) NOT NULL, bar timestamp without time zone, CONSTRAINT pk_foo PRIMARY KEY (foo) ); 然后使用查询: SELECT bar FROM footable WHERE foo = '12345678

很抱歉,如果这是一个非常简单的问题,但是我被文档搞糊涂了,我在网上搜索没有得到任何明确的答案

如果我有下表架构:

CREATE TABLE footable
(
  foo character varying(10) NOT NULL,
  bar timestamp without time zone,
  CONSTRAINT pk_foo PRIMARY KEY (foo)
);
然后使用查询:

SELECT bar FROM footable WHERE foo = '1234567890';
select查询是否通过搜索索引来查找给定行?换句话说:表是否有主键(即foo)

只是为了弄清楚。我习惯于在指定的列后面指定“主键”,如下所示:

"...foo character varying(10) PRIMARY KEY, ..."

它改变了什么吗?

为什么不看看查询计划,看看自己呢?查询计划将准确地告诉您正在使用哪些索引,因此您不必猜测。以下是如何做到这一点:

但一般来说,在这种情况下,它应该使用索引,因为您在where子句中指定了主键,并且没有使用可能阻止它使用它的内容(例如,
之类的


最好查看查询计划以确定其正确性,这样就毫无疑问了。

在这两种情况下,都可以使用主键,但这取决于具体情况。优化器将根据数据量、统计数据等做出选择


命名约束可以使调试和错误处理更容易,因为您知道违反了什么约束。如果没有名字,可能会令人困惑。

感谢您进一步澄清