Add index hint to MySQL query in Arel.

Gem Version Build Status Coverage Status


Add this line to your application's Gemfile:

gem 'arel-mysql-index-hint'

And then execute:

$ bundle

Or install it yourself as:

$ gem install arel-mysql-index-hint


Article.hint(force: :idx_article)
#=> "SELECT `articles`.* FROM `articles` FORCE INDEX (`idx_article`)"

Article.hint(force: [:idx_article, :idx_article2])
#=> "SELECT `articles`.* FROM `articles` FORCE INDEX (`idx_article`, `idx_article`)"

Article.hint(use: :idx_article, ignore: :idx_article2)
#=> "SELECT `articles`.* FROM `articles` USE INDEX (`idx_article`) IGNORE INDEX (`idx_article`)"

Article.joins(:comments).hint(articles: {use: :idx_article})
#=> "SELECT `articles`.* FROM `articles` USE INDEX (`idx_article`) INNER JOIN `comments` ON `comments`

Article.joins(:comments).hint(comments: {force: :idx_comment})
#=> "SELECT `articles`.* FROM `articles` INNER JOIN `comments` FORCE INDEX (`idx_comment`) ON `comments"

Running tests

docker-compose up -d
bundle install
bundle exec appraisal install
bundle exec appraisal activerecord-4.0 rake
bundle exec appraisal activerecord-4.1 rake
bundle exec appraisal activerecord-4.2 rake

Notice: mysql-client is required.

on OS X (docker-machine & VirtualBox)

Port forwarding is required.

VBoxManage controlvm default natpf1 "mysql,tcp,,3306,,3306"