70.5. GIN Tips and Tricks
- Create vs. insert
Insertion into aGIN index can be slow due to the likelihood of many keys being inserted for each item. So, for bulk insertions into a table it is advisable to drop the GIN index and recreate it after finishing bulk insertion.
When
fastupdate
is enabled forGIN (seeSection 70.4.1 for details), the penalty is less than when it is not. But for very large updates it may still be best to drop and recreate the index.- maintenance_work_mem
Build time for aGIN index is very sensitive to the
maintenance_work_mem
setting; it doesn't pay to skimp on work memory during index creation.- gin_pending_list_limit
During a series of insertions into an existingGIN index that has
fastupdate
enabled, the system will clean up the pending-entry list whenever the list grows larger thangin_pending_list_limit
. To avoid fluctuations in observed response time, it's desirable to have pending-list cleanup occur in the background (i.e., via autovacuum). Foreground cleanup operations can be avoided by increasinggin_pending_list_limit
or making autovacuum more aggressive. However, enlarging the threshold of the cleanup operation means that if a foreground cleanup does occur, it will take even longer.gin_pending_list_limit
can be overridden for individual GIN indexes by changing storage parameters, which allows each GIN index to have its own cleanup threshold. For example, it's possible to increase the threshold only for the GIN index which can be updated heavily, and decrease it otherwise.- gin_fuzzy_search_limit