When we talk about `WHERE` clauses, do we mean reading the sql statement log and seeing which fields in `WHERE` clauses are not being indexed already? That sounds a bit tedious. I think indexing columns as foreign keys is a good guideline, as that index will be used more often than not. There usually are only one or two foreign keys on a table, so I don't see much slowdown from that. In the above example, when there is (and I can see there being) a need to say `subscription.user` the foreign_key index will be a benefit, and a developer may not necessarily think that a foreign key was used in a `WHERE` clause. In the conclusion, I think this rule is a good default suggestion, and if something does get slow, then break away from it and optimize.