Since the optimizer is run on EVERY SELECT, it does not matter whether it actually does the work -- the elapsed time is the 'same'.
Note: "prepare" does NOT create a query plan -- that is not done until the "execute" is run.
Even without subqueries, there is "execution" stuff that goes on. Example:
mysql> select * from users;
+------+-------+
| id | misc |
+------+-------+
| 1234 | adzzz |
+------+-------+
1 row in set (0.00 sec)
mysql> explain select * from users where id = 9999;
+----+-------------+-------+------+---------------+------+---------+------+-----
-+-----------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows
| Extra |
+----+-------------+-------+------+---------------+------+---------+------+-----
-+-----------------------------------------------------+
| 1 | SIMPLE | NULL | NULL | NULL | NULL | NULL | NULL | NULL
| Impossible WHERE noticed after reading const tables |
+----+-------------+-------+------+---------------+------+---------+------+-----
-+-----------------------------------------------------+
1 row in set (0.00 sec)
Note how it at least reached into the index to discover that there is no 9999.
The 13 hours was part of the SELECT, just like it was virtually all of the EXPLAIN.