Mysql Expliquer Requête de type “TOUS” lorsqu'un index est utilisé

J'ai couru une requête Mysql comme ci-dessous:

EXPLAIN
SELECT *
FROM(
        SELECT *  # Select Number 2
        FROM post
        WHERE   parentid = 13
        ORDER BY time, id
        LIMIT 1, 10
    ) post13_childs
JOIN post post13_childs_childs
ON post13_childs_childs.parentid = post13_childs.id

et le résultat a été:

id |select_type  |table               |type |possible_keys  |key      |key_len  |ref              |rows    |Extra
1  |PRIMARY      |<derived2>          |ALL  | NULL          | NULL    |NULL     |NULL             |10      |
1  |PRIMARY      |post13_childs_childs|ref  |parentid       |parentid |9        |post13_childs.id |10      |Using where
2  |DERIVED      |post                |ALL  |parentid       |parentid |9        |                 |153153  |Using where; Using filesort

Cela signifie qu'il a utilisé l'indice de parentid mais a scanné toutes les lignes en raison de ALL et 153153.
Pourquoi ne pas l'index de l'aide pour ne pas Full Scannig?

Bien que si je lance la dérivée de la requête (Select #2) seul comme ci-dessous:

Explain
SELECT * FROM post  
WHERE parentid=13
ORDER BY time , id
LIMIT 1,10

serait le résultat souhaité:

id |select_type  |table  |type |possible_keys  |key      |key_len  |ref  |rows    |Extra
1  |SIMPLE       |post   |ref  |parentid       |parentid |9        |const|41      |Using where; Using filesort

Edit:

La table post a ces indices:

  1. id (PRIMAIRE)
  2. parentid
  3. temps, id (timeid)

nombre total de lignes --> 141280.
le comte d'enfants de 13 (parentid=13) --> 41
le comte d'enfants de 11523 --> 10119

Quand j'ajoute de l'indice de (parent,time,id), le problème de la première requête pourrait être résolu par la explin de sortie pour 13 --> 40 lignes, type:ref
et pour 11523 --> 19538 lignes, type:ref!!! cela Signifie que tous les enfants de lignes de 11423 est examiné pendant que j'limitée 10 premières lignes.

Voulez-vous contribuer à l'amélioration et l'optimisation de cette requête? Si oui, nous aurions besoin de voir la totalité de la requête (et ses EXPLICATIONS).
Excusez-moi. J'ai édité et écrit les détails maintenant.
Essayez de créer d'index pour (parentid, time, id). Pour de plus amples référence mysqlperformanceblog.com/2006/09/01/...
Vous ne pouvez pas profiter de l'index dans la table dérivée....
Pourquoi? Vraiment? est une référence disponibles .

OriginalL'auteur ahoo | 2013-12-20