SELECT 
  f.feature_id, 
  f.purpose, 
  p.product_id, 
  p.parent_product_id, 
  g.id, 
  g.code 
FROM 
  cscart_product_variation_group_features AS f 
  INNER JOIN cscart_product_variation_groups AS g ON f.group_id = g.id 
  INNER JOIN cscart_product_variation_group_products AS p ON f.group_id = p.group_id 
WHERE 
  p.product_id IN (
    98865, 98867, 98869, 98871, 98873, 98910, 
    98911, 98912, 98913, 99313, 99314, 
    99315, 99316, 99317, 99318, 99330, 
    99331, 99332, 99347, 99349, 99351, 
    99353, 99355, 99413, 99414, 99415, 
    99416, 99417, 99418, 99419, 99420, 
    99421, 99441, 99442, 99448, 99449, 
    99450, 99451, 99459, 99460, 99461, 
    99462, 99464, 99465, 99470, 99471, 
    99472, 99473, 99478, 99479, 99480, 
    99481, 99487, 99488, 99489, 99490, 
    99558, 99559, 99560, 99566, 99567, 
    99568, 99569, 99577, 99578, 99579, 
    99648, 99649, 99650, 99651, 99652, 
    100139, 100140, 100141, 100142, 100157, 
    100158, 100159, 100160, 100212, 100213, 
    100214, 100215, 100216, 100649, 100650, 
    100651, 100652, 100653, 101508, 101660, 
    101661, 101662, 101663, 101664, 101665
  )

Query time 0.00068

JSON explain

{
  "query_block": {
    "select_id": 1,
    "cost_info": {
      "query_cost": "1.05"
    },
    "nested_loop": [
      {
        "table": {
          "table_name": "f",
          "access_type": "ALL",
          "possible_keys": [
            "idx_group_id"
          ],
          "rows_examined_per_scan": 1,
          "rows_produced_per_join": 1,
          "filtered": "100.00",
          "cost_info": {
            "read_cost": "0.25",
            "eval_cost": "0.10",
            "prefix_cost": "0.35",
            "data_read_per_join": "104"
          },
          "used_columns": [
            "feature_id",
            "purpose",
            "group_id"
          ]
        }
      },
      {
        "table": {
          "table_name": "g",
          "access_type": "eq_ref",
          "possible_keys": [
            "PRIMARY"
          ],
          "key": "PRIMARY",
          "used_key_parts": [
            "id"
          ],
          "key_length": "3",
          "ref": [
            "nuie_scalesta_net.f.group_id"
          ],
          "rows_examined_per_scan": 1,
          "rows_produced_per_join": 1,
          "filtered": "100.00",
          "cost_info": {
            "read_cost": "0.25",
            "eval_cost": "0.10",
            "prefix_cost": "0.70",
            "data_read_per_join": "400"
          },
          "used_columns": [
            "id",
            "code"
          ]
        }
      },
      {
        "table": {
          "table_name": "p",
          "access_type": "ref",
          "possible_keys": [
            "PRIMARY",
            "idx_group_id"
          ],
          "key": "idx_group_id",
          "used_key_parts": [
            "group_id"
          ],
          "key_length": "3",
          "ref": [
            "nuie_scalesta_net.f.group_id"
          ],
          "rows_examined_per_scan": 1,
          "rows_produced_per_join": 1,
          "filtered": "100.00",
          "index_condition": "(`nuie_scalesta_net`.`p`.`product_id` in (98865,98867,98869,98871,98873,98910,98911,98912,98913,99313,99314,99315,99316,99317,99318,99330,99331,99332,99347,99349,99351,99353,99355,99413,99414,99415,99416,99417,99418,99419,99420,99421,99441,99442,99448,99449,99450,99451,99459,99460,99461,99462,99464,99465,99470,99471,99472,99473,99478,99479,99480,99481,99487,99488,99489,99490,99558,99559,99560,99566,99567,99568,99569,99577,99578,99579,99648,99649,99650,99651,99652,100139,100140,100141,100142,100157,100158,100159,100160,100212,100213,100214,100215,100216,100649,100650,100651,100652,100653,101508,101660,101661,101662,101663,101664,101665))",
          "cost_info": {
            "read_cost": "0.25",
            "eval_cost": "0.10",
            "prefix_cost": "1.05",
            "data_read_per_join": "16"
          },
          "used_columns": [
            "product_id",
            "parent_product_id",
            "group_id"
          ]
        }
      }
    ]
  }
}