From c5571e66fee39e9777085c507d1d8b22f285066f Mon Sep 17 00:00:00 2001 From: Yorick Peterse Date: Fri, 11 Aug 2017 14:16:08 +0200 Subject: Document not using database hash indexes --- doc/development/hash_indexes.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 doc/development/hash_indexes.md (limited to 'doc/development/hash_indexes.md') diff --git a/doc/development/hash_indexes.md b/doc/development/hash_indexes.md new file mode 100644 index 00000000000..e6c1b3590b1 --- /dev/null +++ b/doc/development/hash_indexes.md @@ -0,0 +1,20 @@ +# Hash Indexes + +Both PostgreSQL and MySQL support hash indexes besides the regular btree +indexes. Hash indexes however are to be avoided at all costs. While they may +_sometimes_ provide better performance the cost of rehashing can be very high. +More importantly: at least until PostgreSQL 10.0 hash indexes are not +WAL-logged, meaning they are not replicated to any replicas. From the PostgreSQL +documentation: + +> Hash index operations are not presently WAL-logged, so hash indexes might need +> to be rebuilt with REINDEX after a database crash if there were unwritten +> changes. Also, changes to hash indexes are not replicated over streaming or +> file-based replication after the initial base backup, so they give wrong +> answers to queries that subsequently use them. For these reasons, hash index +> use is presently discouraged. + +RuboCop is configured to register an offence when it detects the use of a hash +index. + +Instead of using hash indexes you should use regular btree indexes. -- cgit v1.2.1