如何确定添加索引的成本/收益?


10

根据Craig Ringer的说法:

虽然在引用侧外键列上(或包括)创建索引通常是一个好主意,但这不是必需的。每个索引添加减慢DML操作略有下降,所以你在每交纳履约成本INSERTUPDATEDELETE。如果很少使用该索引,则可能不值得使用。

您如何确定添加索引的好处是否超过其成本?

您是否在添加索引之前/之后分析了单元测试,并检查整体性能提升?或者,还有更好的方法?


pg_stat_user_indexes帮助您进行指导,显示有关索引使用情况的信息。要估算维护成本,您可以查看表的写入活动,pg_stat_user_tables但是由于HOT的原因,并非所有更新都必须接触索引,因此您可能会高估一点。
Craig Ringer 2014年

@CraigRinger,这非常有帮助。谢谢!
吉利2014年

我几乎完全依赖pgBadger。还有我的直觉。
Colin't Hart

Answers:


4

索引的使用取决于数据的结构和数据的选择性。如果您查询不使用的查询,则价格昂贵。如果您有效地使用它们,它们将是很好的工具。有一个查询计划程序和查询计划程序分析工具(EXPLAIN)仅用于计划或计划和执行命令(EXPLAIN ANALYZE)。

并且有一本很棒的在线书:使用索引卢克来推荐索引的用法


4
经验法则很好,但是在这种情况下太笼统了。我正在寻找一种具体的工具/度量,该工具/度量将建议根据我的应用程序的实际运行时行为添加/删除索引。
吉利2014年


1

选择经验法则并遵循它们。例如,我总是在外键的引用侧创建索引。

确保根据用户需求根据性能标准对产品进行性能测试。例如,系统需要处理每分钟100个POST请求类型X的传入负载。

如果您不能满足性能要求,则可以优化模型,可能会破坏该过程中的经验法则。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.