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 (
    87078, 87123, 87124, 87125, 87126, 87127, 
    87128, 87129, 86906, 86907, 86908, 
    86909, 86910, 86911, 86967, 86968, 
    86969, 86970, 86971, 86972, 87028, 
    87029, 87030, 87031, 87032, 87033, 
    87087, 87088, 87089, 87090, 87091, 
    87092, 86920, 86921, 86922, 86923, 
    86924, 86925, 86926, 86981, 86982, 
    86983, 86984, 86985, 86986, 86987, 
    87042, 87043, 87044, 87045, 87046, 
    87047, 87048, 87100, 87101, 87102, 
    87103, 87104, 87105, 87106, 86913, 
    86914, 86915, 86916, 86917, 86918, 
    86919, 86974, 86975, 86976, 86977, 
    86978, 86979, 86980, 87035, 87036, 
    87037, 87038, 87039, 87040, 87041, 
    87093, 87094, 87095, 87096, 87097, 
    87098, 87099, 91014, 91026, 91038, 
    91051, 86904, 86929, 86965, 86990
  )

Query time 0.00069

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 (87078,87123,87124,87125,87126,87127,87128,87129,86906,86907,86908,86909,86910,86911,86967,86968,86969,86970,86971,86972,87028,87029,87030,87031,87032,87033,87087,87088,87089,87090,87091,87092,86920,86921,86922,86923,86924,86925,86926,86981,86982,86983,86984,86985,86986,86987,87042,87043,87044,87045,87046,87047,87048,87100,87101,87102,87103,87104,87105,87106,86913,86914,86915,86916,86917,86918,86919,86974,86975,86976,86977,86978,86979,86980,87035,87036,87037,87038,87039,87040,87041,87093,87094,87095,87096,87097,87098,87099,91014,91026,91038,91051,86904,86929,86965,86990))",
          "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"
          ]
        }
      }
    ]
  }
}