对于postgresql 9.3中的整数类型的外键,哪个索引表现更好?
我假设一个哈希索引,因为外键comparisson总是用=
或者,当用于外键上的JOINS时,btree与哈希的比较速度是否快?
因为在postgresql主键中使用btree,这表明它们对外键也更好。
答案 0 :(得分:6)
警告哈希索引操作目前不是WAL记录的,所以哈希 数据库崩溃后,可能需要使用
REINDEX
重建索引 如果有不成文的变化。此外,哈希索引的更改不是 在初始化之后通过流式传输或基于文件的复制进行复制 基本备份,因此他们为随后的查询提供错误的答案 使用它们。由于这些原因,目前不鼓励使用哈希索引。
也没有证据表明哈希索引比btree具有任何性能优势。
答案 1 :(得分:0)
你能解释一下如何在内部创建外键吗?当我在创建约束时运行iostat时,没有写入磁盘但是有许多读取。对于单线程PostgreSQL系统,创建外键的过程非常I / O(读取)和CPU密集型。
答案 2 :(得分:0)
这取决于。
如果您不使用外键进行任何查询,请you don't need any index。引用完整性是通过引用的主键的索引来强制实现的。
因此,对于任何列,要使用哪种索引类型(如果有)的问题是相同的。如果您的查询将从索引中受益=
,并且您使用的是PostgreSQL 10或更高版本,那么HASH索引是一个合理的选择。如果同一列涉及任何排序操作(ORDER BY
,<
,>=
等),那么您也可以使用BTREE。
如果您非常关注相对性能,则需要使用自己的数据分布和查询负载自己进行测试。由于数据访问的位置(顺序与随机),树索引的性能可能仍优于散列。