Muchas gracias deadlykyo. Si creo el indice que me indicas me dice que el campo que es PK (en este caso, id) no puede estar en dos indices diferentes. Si borro los indices que tengo y pongo solo el compuesto, volvemos un paso atras ya que escanea las 299 tuplas.
Te pongo el resultado de los shows:
mysql>SHOW INDEX FROM producto;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Comment
producto 0 PRIMARY 1 id A 299 NULL NULL
producto 1 idCategoria 1 idCategoria A 15 NULL NULL
producto 1 idSubcategoria 1 idSubcategoria A 21 NULL NULL
mysql>SHOW INDEX FROM descripcion;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Comment
descripcion 0 PRIMARY 1 idProducto A 299 NULL NULL
mysql>SHOW INDEX FROM precio;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Comment
precio 0 PRIMARY 1 idProducto A 299 NULL NULL
Si quito el ORDER BY ya no me sale el using filesort, xo sq necesito obtener el resultado ordenado... siempre que lo uso me hace lo del filesort, en esta otra sentencia tb me lo hace:
explain select es,id,link from categorias order by es ASC :(
Te agradezco muchisimo que me dediques parte de tu tiempo, a ver si conseguimos arreglar esto ;)
P.D: ahora estoy mirandome los tipos de JOIN que hay y he visto que el LEFT JOIN devuelve los mismos resultados que un JOIN y ademas, retorna las tuplas de la tabla de la izquierda que no tienen nada asociado en la tabla de la derecha (NULL). Según esto, como es que en la sentencia que puso CBBzun en el post 2, usa LEFT JOIN y no JOIN?? por algun motivo en especial o un JOIN seria más optimo? de todas maneras en mi mysql 4 me da error cuando hago una sentencia usando JOIN y ON: select campo from tabla1 JOIN tabla2 ON (tabla1.campo = tabla2.campo2) WHERE xxx merciiiiiiiii ;)