繁体   English   中英

使用主键作为索引

[英]Using Primary Keys as Index

在我的应用程序中,我通常使用主键作为访问数据的方式。 但是我被告知为了提高性能,我应该在我的表中索引列,但是我不知道应该索引哪些列。

现在问题:

1)将主键作为索引是否是个好主意?(假设主键是唯一的,一个id

2)我怎么知道要索引的列?

1) 主键在Postgres中自动使用唯一索引实现
MySQL也是如此。

你在这里完成了。

2)关于其他指数的建议,请考虑这个密切相关的答案:
优化PostgreSQL只读表

同样,MySQL和Postgres的基础是相同的。 但是,如果您需要,Postgres具有更多高级功能,如部分或功能索引 但是,从基础知识开始。

您的主键已经有一个PostgreSQL自动为您创建的索引。 您无需再次索引该列。

至于其他领域,请看看这里关于计算基数的文章: http//kirk.webfinish.com/2013/08/some-help-to-find-uniqueness-in-a-大表有一对多场/

完全唯一的字段是候选字段,没有唯一性的字段对索引无用。 甜蜜点是中间的基数(.5)。

当然,您应该查看WHERE子句中使用的列。 索引不属于您的quals的列是没用的。

只有在正式将主键定义为主键时,主键才会具有idex。 大多数人忘记制作索引的地方是Foriegn键,它们通常不会自动编入索引,并且几乎总是会参与连接并因此编入索引。 索引的其他候选者是您经常过滤数据的东西,其中包含大量可能的值,例如名称,部件号,开始日期等。

1)将主键作为索引是否是个好主意?(假设主键是唯一的,一个id

我所知道的所有DBMS都会自动在PK下创建一个索引。

在MySQL / InnoDB的情况下,PK不仅会被索引,而且该索引将成为聚簇索引

(顺便说一下,只是说“主键”意味着它是唯一的,所以没有必要明确说明“假设主键是唯一的”。)

2)我怎么知道要索引的列?

这取决于需要支持哪些查询。

但请注意,添加索引不是免费的,而是工程权衡的问题 - 虽然某些查询可能会从索引中受益,但实际上有些查询可能会受到影响。 例如:

  • FOO上的索引将显着加快SELECT * FROM T WHERE FOO = ...
  • 但是,相同的索引会稍微减慢INSERT INTO T VALUES (...)

在大多数情况下,你喜欢SELECT中的大加速而不是INSERT中的小减速,但情况可能并非总是如此。

索引和数据库性能通常是一个复杂的主题,超出了简单的StackOverflow帖子的范围,但如果你感兴趣我热烈推荐阅读使用索引,卢克!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM