Mar*_*rey 2 postgresql indexing foreign-keys query-optimization
一位同事声称他过去使用外键来优化查询.我认为仅在插入或更新表中的数据时才使用外键.我不知道它们如何用于加速搜索.
外键如何在创建执行计划时提供帮助?我错过了什么吗?如果是这样,那么它在什么情况下有帮助?
(我们使用PostgreSQL,我没有太多的经验.它有可能与Oracle或MySQL的行为不同吗?)
是的,外键肯定可以提高查询的性能,但这取决于您使用的数据库以及这些密钥是否" 强制执行 ".
在Oracle和SQL Server中,使用外键肯定可以在读取/连接外键上的多个表时提高性能
为什么?具有经检查/验证的外键为查询优化器提供关于2个表具有的关系的额外信息.
它知道,当子表内部连接到父表时:
这有助于查询优化器估计要处理的行.对于大多数(如果不是全部)查询优化器而言,这种正确的估计非常重要.
最近在Hadoop Hive中以元数据的形式添加了外键,可以看出这个一般事实的证据.这个增加的目标是帮助CBO(基于成本的优化器),这个Hive Jira条目解释了......
此外,在使用事实表时,在外键上使用(位图)索引还可以提高Oracle的性能: '应在事实表或表的每个外键列上构建位图索引.请参阅以下链接...
外键在显而易见的原因下会在插入/更新数据时花费额外的费用:与没有fk的数据库相比,数据库必须完成额外的工作
您可以通过调查Explain计划在SQL服务器(例如)中轻松地看到这一点.
我不知道Postgresql,但我验证FK效果的方法是查看解释计划.启用/禁用/删除FK时它们是否不同?
[编辑]我实际上发现了这个证据,证明 FK可以在Postgresql中启用读取性能,但原因有所不同:因为启用了FK,示例中的查询可以更改为更高性能.
| 归档时间: |
|
| 查看次数: |
2406 次 |
| 最近记录: |