在postgresql中:澄清“CONSTRAINT foo_key PRIMARY KEY(foo)”

时间:2010-03-09 14:00:13

标签: 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 = '1234567890';

select查询是否会通过搜索索引来查找给定的行?换句话说:表是否有主键(foo)?

只是为了弄清楚。我习惯于在我指定的列之后指定“PRIMARY KEY”:

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

它会改变什么吗?

2 个答案:

答案 0 :(得分:3)

为什么不查看查询计划并找出自己?查询计划将准确告诉您正在使用的索引,因此您不必猜测。这是怎么做的: http://www.postgresql.org/docs/current/static/sql-explain.html

但一般情况下,它应该在这种情况下使用索引,因为你在where子句中指定了主键,并且没有使用可能阻止它使用它的东西(例如LIKE

总是最好查看查询计划以确定它,然后毫无疑问。

答案 1 :(得分:0)

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

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