Simplest MySql query uses filesort and ignores created_at index?
With InnoDB, any secondary index (such as INDEX(created_id)) implicitly includes a copy of the PRIMARY KEY (id).  Hence, the first query is "covering" as indicated by "Using index".
When you need to look at more than about 20% of a table, it is actually faster to ignore the index, and do a full table scan -- rather than bouncing between the index and the data.  (The index and the data are separate BTree structures, connected by that PK copy.)
ORDER BY causes a filesort unless it can be consumed by the index it is using.  (But it is not using it, as the above point points out.)
MySQL rarely uses more than one index in a SELECT.  (Because using multiple indexes would be more complex, and almost always slower.)


That is just a few of the possible things that can go on (other than the items I just mentioned).

See also my Index Cookbook .