| name | hypopg-help |
| description | used for preparing hypothetical indexes to be run in higher environments |
Building hypothetical indexes
Useful when a database includes the hypopg extension (for Postgres) to create and test hypothetical indexes. The goal is to create a copy and pasteable set of commands that a user can run to create a hypothetical index for testing in a higher environment.
The final deliverable is a set of Ruby commands to copy/paste. Wrap them in code blocks.
Instructions
- Work with the user to determine the index design. Ask them about contents, which table, and any ordering or conditional concerns.
- Use
connection = ::ActiveRecord::Base.lease_connectionto find an available connection - Create a temporary variable called
create_index_sqlusing a<<~SQL.squishheredoc for the index creation. - Next, use string interpolation to create a new SQL string to create the hypopg index using
hypopg_create_index(). Set this tohypopg_sql. Useconnection.quote(create_index_sql)to properly handle nested quotes and SQL escaping when interpolating the SQL string into the hypopg function call - Provide the snippet for the end user to use
connection.execute hypopg_sql. The result should be saved toresultsand we should instruct the user to outputresults.to_a. - To verify the hypothetical index is being used, instruct the user to use the same
connectionto call.executewith string interpolation to add "EXPLAIN " at the beginning of a#to_sqlcall on a chain of model code. For example:connection.execute("EXPLAIN #{Model.where(...).to_sql}"). - Provide follow-up instructions to the user on how to verify the new hypothetical index is being used. Provide context on how to clean up new hypothetical indexes if they need to try an alternative.