Summary

Query runs 1 operator; returns 45 rows in 0.05 ms. No warnings.

Total time
49 µs
Rows returned
45
Rows examined
45
Operators
1

Execution plan (flamegraph)

Click a plan operator to inspect details.

MySQL Query Plan Reset Zoom Search ic Deduplicate rows sorted by row ID on t1 starts=1 rows=45 (49 µs, 100.00%) Table: t1 Access: rowid_union Rows: 45 actual (45 estimated) Time: 0.049 ms (last row) Cost: 0.06 Condition: t1.a = 50 or t1.b = 100 Covering: No Deduplicate rows sorted by row ID on t1 starts=1 rows=45

myteach — interactive algorithm catalog

Every operator shown above has a hands-on lesson with a cost-model slider and an animated walk-through. The catalog is the central index — bookmark it once, revisit per query:

Open the full catalog →

Lessons relevant to this plan

Raw sidecar (JSON)

{
  "$schema": "https://myflames.dev/schemas/sidecar-v1.json",
  "schema_version": "1.3",
  "generated_at": "2026-04-25T12:51:23Z",
  "myflames_version": "1.5.0",
  "source": {
    "type": "file"
  },
  "plan_summary": {
    "total_time_ms": 0.049,
    "rows_sent": 45,
    "rows_examined_estimate": 45,
    "operator_count": 1,
    "max_depth": 1
  },
  "optimizer_switches": [
    {
      "name": "index_merge",
      "value": "on",
      "explanation": "Uses two or more index range scans on the same table and combines row IDs (union/intersection/sort_union) instead of falling back to a full scan. A composite index is usually faster.",
      "node_labels": [
        "Deduplicate rows sorted by row ID on t1"
      ]
    },
    {
      "name": "index_merge_union",
      "value": "on",
      "explanation": "Union variant of index_merge: OR'ed predicates are satisfied by scanning each index separately, then UNION'ing their row IDs.",
      "node_labels": [
        "Deduplicate rows sorted by row ID on t1"
      ]
    }
  ],
  "warnings": [],
  "suggestions": [],
  "executive_summary": "Query runs 1 operator; returns 45 rows in 0.05 ms. No warnings.",
  "plan_tree": {
    "node_id": "n:67a526a822ff",
    "short_label": "Deduplicate rows sorted by row ID on t1",
    "folded_label": "Deduplicate rows sorted by row ID on t1 starts=1 rows=45",
    "children": []
  },
  "teach_hooks": [
    {
      "lesson": "index_merge",
      "match": {
        "folded_label": "Deduplicate rows sorted by row ID on t1 starts=1 rows=45",
        "short_label": "Deduplicate rows sorted by row ID on t1"
      },
      "controls": {
        "a_rows": 27,
        "b_rows": 18,
        "overlap": 30,
        "variant": "union"
      },
      "note": "Deduplicate rows sorted by row ID on t1 (t1)"
    }
  ],
  "operator_complexities": [
    {
      "node_id": "n:67a526a822ff",
      "folded_label": "Deduplicate rows sorted by row ID on t1 starts=1 rows=45",
      "short_label": "Deduplicate rows sorted by row ID on t1",
      "complexity": {
        "big_o": "O(Σ kᵢ)",
        "short": "Σ kᵢ",
        "severity": "medium",
        "rationale": "Index merge (union): each index scan returns kᵢ row IDs; merging them through a sorted-list union costs a pass over the total.",
        "confidence": "typical",
        "learn_more": "index_merge"
      }
    }
  ]
}

Teach: Operator deep dive