Simple count id in MySql table is taking to long
For 2, your COUNT(id) may be checking each value of id in the range to see if it is NULL (the column is marked NOT NULL but I don't know if mySQL's query planner will take notice of this) which is an extra lookup operation because id isn't included in the timedate index. Try use COUNT(*) instead and see if that helps any.

For 1, you are partitioning by a function rather than a direct column, so it isn't going to be able to perform simple partition filtering when querying base on just the column value. Even if you partition based on the column value directly you should n't expect simple partitioning to produce faster results unless you are spreading the data over multiple devices (or even then) - partitioning is more of a management feature than a performance one. You need to provide more detail before we can help more there: what is the full definition of the partitioned table and its indexes? How much slower are you finding it?

For both, you should give the output of EXPLAIN &lt;query&gt; so we can see the query plan that is produced.

(edit the extra information into your question, rather than as comments in response to this answer, otherwise some people would might be able to help may not see it)