The order does matter in indexing.
- Put the most selective field first, i.e. the field that narrows down the number of rows fastest.
- The index will only be used insofar as you use its columns in sequence starting at the beginning. i.e. if you index on
[:user_id, :article_id], you can perform a fast query onuser_idoruser_id AND article_id, but NOT onarticle_id.
Your migration add_index line should look something like this:
add_index :user_views, [:user_id, :article_id]
Question regarding ‘unique’ option
An easy way to do this in Rails is to use validates in your model with scoped uniqueness as follows (documentation):
validates :user, uniqueness: { scope: :article }