SeqScanner
SeqScanner is a testing tool for ActiveRecord models to verify that your queries are using the correct indexes.
Overview
In development and test, with a small database, postgres will often use a sequence scan even when there is an index available, making it difficult to verify that your queries will use the correct indexes in production. SeqScanner is a testing tool for ActiveRecord models to verify that your queries are using the correct indexes.
Installation
Add this line to your application's Gemfile in the test (or development) group:
group :test do
gem 'seq_scanner'
end
Usage
SeqScanner.scan do
User.order(:name).first
end
This will do the following:
Tell postgres to not use any sequence scans, if possible.
Examine the query plan for the given block of code and raise an error if a sequence scan is used.
Reset postgres to default settings.
Under these conditions, postgres will only use a sequence scan if there is no index that can be used to satisfy the query. This will raise an error if your query would not use the correct index in production.
In tests
For rspec, you can wrap your tests in a SeqScanner.scan
block:
RSpec.configure do |config|
# ...
config.around(:each) do |example|
SeqScanner.scan do
example.run
end
end
# ...
end
This will ensure that all queries in your tests have appropriate indexes.