SELECT 
  tmall_discussion_posts.*, 
  tmall_discussion_messages.message, 
  tmall_discussion_rating.rating_value 
FROM 
  tmall_discussion_posts 
  LEFT JOIN tmall_discussion_messages ON tmall_discussion_messages.post_id = tmall_discussion_posts.post_id 
  LEFT JOIN tmall_discussion_rating ON tmall_discussion_rating.post_id = tmall_discussion_posts.post_id 
WHERE 
  tmall_discussion_posts.thread_id = 3775 
  AND tmall_discussion_posts.status = 'A' 
ORDER BY 
  tmall_discussion_posts.timestamp DESC 
LIMIT 
  0, 10

Query time 0.00906

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost": 0.015275905,
    "nested_loop": [
      {
        "read_sorted_file": {
          "filesort": {
            "sort_key": "tmall_discussion_posts.`timestamp` desc",
            "table": {
              "table_name": "tmall_discussion_posts",
              "access_type": "ref",
              "possible_keys": ["thread_id", "thread_id_2"],
              "key": "thread_id",
              "key_length": "3",
              "used_key_parts": ["thread_id"],
              "ref": ["const"],
              "loops": 1,
              "rows": 3,
              "cost": 0.004492149,
              "filtered": 100,
              "attached_condition": "tmall_discussion_posts.thread_id <=> 3775 and tmall_discussion_posts.`status` = 'A'"
            }
          }
        }
      },
      {
        "table": {
          "table_name": "tmall_discussion_messages",
          "access_type": "eq_ref",
          "possible_keys": ["PRIMARY"],
          "key": "PRIMARY",
          "key_length": "3",
          "used_key_parts": ["post_id"],
          "ref": ["tmall.tmall_discussion_posts.post_id"],
          "loops": 3,
          "rows": 1,
          "cost": 0.005391878,
          "filtered": 100
        }
      },
      {
        "table": {
          "table_name": "tmall_discussion_rating",
          "access_type": "eq_ref",
          "possible_keys": ["PRIMARY"],
          "key": "PRIMARY",
          "key_length": "3",
          "used_key_parts": ["post_id"],
          "ref": ["tmall.tmall_discussion_posts.post_id"],
          "loops": 3,
          "rows": 1,
          "cost": 0.005391878,
          "filtered": 100
        }
      }
    ]
  }
}

Result

post_id thread_id name timestamp user_id ip_address status message rating_value
118 3775 Steve 1484901900 0 80451060 A I know it’s not an MTB, but I used it for some hardcore cross-country riding! Had to replace almost half of the parts after the first two rides, they just won’t do at all. 4
119 3775 Rosa 1484901900 0 80451060 A I wish it had a softer seat… Besides that, I use it for short park riding, and it provides a very smooth riding experience. 3
117 3775 Julia 1484901840 0 80451060 A Got this bike with a discount, a really affordable option for most people out there. I got almost 100 miles on it, no problems so far. Don’t forget to clean it after every ride. 5